Dateisperren unter Windows



  • 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!


Anmelden zum Antworten