Ich habe ein single-threaded-Programm, das Ordner und Dateien in einem Quellverzeichnis verarbeitet. Gibt es eine Möglichkeit, einen Ordner mit darin enthaltenen Dateien in meinem Quellverzeichnis daran zu hindern, von anderen Prozessen geändert zu werden, während mein Programm daran arbeitet? Ich denke an etwas wie eine Art exklusive Sperre für den Ordner selbst, so dass nur der Prozess meines Programms es verwenden kann.
HINWEIS:
Ich möchte nicht das Root-Quellverzeichnis selbst blockieren, egal welche Ordner in der obersten Ebene dieses Verzeichnisses ich gerade zu einem bestimmten Zeitpunkt verarbeite. Ich möchte weiterhin zulassen, dass externe Prozesse Ordner zum Quellverzeichnis hinzufügen, während ich andere Ordner verarbeite.
UPDATE:
@ Yuri - Ja, das ist ein Windows-Programm, eine Windows-Dienst-Anwendung um genau zu sein.
Ein Teil dessen, was dies sowohl herausfordernd als auch notwendig macht, ist, dass ich die Struktur der Ordner, die ich gerade verarbeite, im Quellverzeichnis in einem separaten Zielverzeichnis wiederherstellen muss. Ich kann also keinen anderen Prozess haben, der den Ordner und die Datei (en) verändert, während mein Programm damit arbeitet.
Möglichkeiten zum Sperren eines Ordners:
1.Markiere es readonly. (Eingeschlossen, weil Leute das immer versuchen)
Con - Dies funktioniert nicht. Bei Ordnern wird das readonly-Flag für andere Zwecke verwendet.
2.Markiere den ganzen Inhalt readonly.
Con - Verhindert nicht bestimmte Arten von Aktionen (z. B. Erstellen neuer Elemente).
3.User ACL verwenden Con - Verhindert nicht, dass Administratoren sich mit dem Ordner anlegen. Erfordert bestimmte Arten von Berechtigungen.
4.Verwenden Sie ACL mit einem speziell erstellten Benutzer und aktivieren Sie den Ordner Verschlüsselung.
Con - Das ist wirklich schrecklich. Wenn etwas schief geht, sind Ihre Daten möglicherweise verloren.
5.Rename / Verschieben Sie den Ordner
Con - Kann durch Benutzer-Dummheit umgangen werden.
6. (Bearbeiten) gjvdkamps Antwort: Einzelne Dateien sperren
Con - Wie bei # 2, erlaubt dies immer noch das Erstellen neuer Dateien innerhalb der Ordner. Das heißt, das ist The Right Way ™ um es zu tun.
edit nicht diesen Hack, funktioniert nicht: Ссылка
Sonst würde ich alle Dateien in foder durchlaufen, ein list<FileStream>
erstellen und dann bei jedem Lock aufrufen. Dies würde Ihnen eine feinere Kontrolle darüber geben, welche Dateien gesperrt werden sollen.
GJ
Bearbeiten: Versuchen Sie etwas in diesen Zeilen:
%Vor%Ich denke, das könnte Ihnen helfen Ссылка
Was der Artikel im Grunde tut, ist die Erweiterung des Ordners zu einem der folgenden zu ändern:
". {2559a1f2-21d7-11d4-bdaf-00c04f60b9f0}" ". {21EC2020-3AEA-1069-A2DD-08002B30309D}" ". {2559a1f4-21d7-11d4-bdaf-00c04f60b9f0}" ". {645FF040-5081-101B-9F08-00AA002F954E}" ". {2559a1f1-21d7-11d4-bdaf-00c04f60b9f0}" ". {7007ACC7-3202-11D1-AAD2-00805FC1270E}"
Und speichert das Passwort im Ordner
Hoffe, das hilft
Alex