Dateisperren unter Windows
-
Wie kann ich Dateisperren unter Windows realisieren? Benutze häufiger den freien Borland-Compiler, deshalb wäre eine Beschreibung ohne MSVC nützlich oder auch ein Beschreibung, wie der MSVC-Mechanismus ohne VS benutzt werden kann. Auf fcntl.h bin ich bereits gestoßen, scheint Unix-spezifisch zu sein - oder kann es auch unter Windows verwendet werden? Kommentierter Beispiel-Code wäre dann schön.
Für Beispielcode, wie das mit MSVC realisiert wird, wäre ich auch dankbar.
-
ACL evtl?
-
LockFile
-
Und warum kann ich damit noch auf die Datei zugreifen?
HANDLE hFile; hFile = CreateFile( "c:\\test.txt", GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); LockFile(hFile, 0, 0, 0xffffffff, 0xffffffff); MessageBox("Lock c:\\test.txt\n"); Sleep(5000); UnlockFile(hFile, 0, 0, 0xffffffff, 0xffffffff); MessageBox("Unlock c:\\test.txt\n"); CloseHandle(hFile);Die Datei existiert, aber am Zugriff ändert sich nix.
-
Wie meinst Du das? Das Locken bringt ja nur was, wenn Du von mehreren Threads/Processes gleichzeitig auf die Datei zugreifst...
-
Ich hatte das so verstanden, dass die Datei nur noch durch mein
Programm geöffnet werden kann und somit durch einfaches Anklicken
im Explorer "Zugriff verweigert" o.ä. bringt.
-
Das ist keine Datei-Sperre, sondern einfach ein "kein-sharen"...
HANDLE hFile; hFile = CreateFile( "c:\\test.txt", GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); MessageBox("Ungeshared c:\\test.txt\n"); Sleep(5000); CloseHandle(hFile); MessageBox("Jetzt wieder geshared c:\\test.txt\n");
-
Ich bekomme bei GetLastError immer NULL zurück.
Also stimmt da doch was nicht?! Die Datei kann also
nicht "locked" gesetzt werden. But why? :xmas2:
-
Hä?
Wo gibt es denn in den Code ein Fehler? Wo rufst Du GLE auf? Kannst Du mal *genau* sagen was Du machst und was Du machen willst?
-
Ich möchte eine Datei vor dem Zugriff durch den Nutzer sperren.
C:\test.txt soll nicht zugänglich sein.
GLE rufe ich nach CloseHandle auf. Vielleicht ist ja LockFile gar nicht das
was für meine Zwecke nötig wäre.
-
Also jetzt rein vom Planungstechnischen bräuchtest du denke ich ein Programm, welches ständig die Dateiaufrufe prüft.
Sprich es müsste eine Möglichkeit geben, genau das Öffnen einer Datei abzufangen.
-
"Zugriff verweigert" kenne ich auch von NTFS, setz doch einfach da die berechtigungen, dann haste doppelten schutz. (wenn das datei sperren funktioniert)
MSDN sagt:
The Return Value section of the documentation for each function that sets the last-error code notes the conditions under which the function sets the last-error code. Most functions that set the thread's last-error code set it when they fail. However, some functions also set the last-error code when they succeed. If the function is not documented to set the last-error code, the value returned by this function is simply the most recent last-error code to have been set; some functions set the last-error code to 0 on success and others do not.
also ist in dem fall kein fehler passiert, warum sollte das schliessen eines handles auch fehler geben, wenn es gültig ist

vielleicht bist du nur zu langsam um in den 5 sekunden auf die datei zuzugreifen

MfG Mailmaster :xmas1:
-
Nein, er ist nicht zu langsam. Ich kann die Datei so auch net sperren!