In meiner Testumgebung habe ich zwei physische Windows 7-Clients. Beide haben Zugriff auf eine Netzwerkfreigabe, die auf einem Windows Server-System gehostet wird.Unsicher über den Mechanismus zum Sperren von Dateien in C# .NET
Die Clients führen jeweils eine Anwendung aus, die versuchen kann, dieselbe Textdatei gleichzeitig zu lesen oder zu schreiben.
Ich mag die FileInfo.Open() Methode verwenden, um verschiedene Szenarien zu realisieren:
Szenario 1: Die Anwendung ermöglicht es zugleich zu lesen. Es sollte fehlschlagen, wenn eine andere Instanz tatsächlich darauf schreibt.
würde ich
FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.Open(FileMode.Open, FileAccess.Read, FileShare.Read))
{
// Do some read operations...
Console.WriteLine("Press ENTER to close file-stream...");
Console.ReadLine();
}
dafür.
Szenario 2: Nur eine Instanz darf eine Datei öffnen, wenn sie versucht, darauf zu schreiben. Und es sollte fehlschlagen, wenn eine andere Instanz es tatsächlich liest.
würde ich
FileInfo fi = new FileInfo(filePath);
using (FileStream fs = fi.Open(FileMode.Open, FileAccess.Write, FileShare.None))
{
// Do some write operations...
Console.WriteLine("Press ENTER to close file-stream...");
Console.ReadLine();
}
dafür.
Mit den Code-Schnipsel oben funktionieren meine Szenarien wie erwartet. Obwohl ich eine Instanz innerhalb der using(...)
Anweisung geschlossen habe, wird die Datei "entsperrt".
Q1: Ich denke darüber nach, ob bei einem Programmabsturz irgendetwas passieren könnte, so dass andere Instanzen Zugriff auf die Datei verweigert werden (für ein paar Zeit?).
Q2: Was passiert, wenn eine Netzwerkverbindung unterbrochen wird, während eine Datei geöffnet wird?
Q3: Gibt es Gründe (zusätzlich) verwenden, um die FileStream.Lock() und Unlock() Methoden explizit Sperre und eine Datei entsperren?
Q4: Benötigt das System des Servers irgendetwas, damit die Dateisperrung ausgeführt wird?
Q5: Gibt es zusätzliche Punkte, über die ich nachdenken muss?
Überlegen Sie, was passiert, wenn jemand versucht, die Datei mit einem Programm zu öffnen/zu ändern, das nicht in Ihrer Kontrolle ist. Sie werden nicht immer die Lock-Typen verwenden, die Sie erwarten. – CathalMF
@CathalMF Guter Punkt. Aber ich denke, in meinem Fall liegt es an den Endnutzern, dies nicht zu tun. Die Leute werden (hoffentlich) wissen, was sie tun :-) –
Wir alle hoffen, dass unsere Benutzer wissen, was sie tun. Aber es gibt immer diese eine Person !! Stellen Sie nur sicher, dass Ihre App nicht explodiert, wenn jemand die Datei mit einer Kombination aus Freigabeberechtigungen und Lesen/Schreiben öffnet. – CathalMF