C # - Blockiert, dass ein Ordner während der Verarbeitung geändert wird

8

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.

    
kingrichard2005 14.01.2011, 15:58
quelle

4 Antworten

7

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.

    
Brian 14.01.2011, 16:09
quelle
6

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%     
gjvdkamp 14.01.2011 16:06
quelle
0

Warum nimmst du keine neue Kopie des Ordners, arbeitest an dieser und ersetzst wenn nötig die alte?

    
Nobody 14.01.2011 16:11
quelle
0

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

    
dalexsoto 14.01.2011 16:06
quelle

Tags und Links