2009-11-10 4 views
10

Ich versuche herauszufinden, wie eine Binärdatei mit FileStream und BinaryWriter schreiben, und halten Sie die Datei zum Lesen gesperrt, während ich schreibe. Ich möchte insbesondere nicht, dass andere Anwendungen/Prozesse während des Schreibens von der while lesen können.Wie kann ich eine Datei während des Schreibens über einen FileStream sperren?

//code to declare ba as a byte array 

//dpath is the path to the file 

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, FileAccess.Write); 

BinaryWriter Writer = new BinaryWriter(BinaryFile); 

Writer.Write(ba); 

Writer.Close(); 

BinaryFile.Dispose(); 

Jetzt ist das Problem, die Datei kann während des Schreibens von anderen Anwendungen geöffnet werden, was in meiner aktuellen Anwendung unerwünscht ist. Die hat eine Lock-Methode, die aber zum Schreiben gesperrt ist und nicht zum Lesen, so dass mir das nicht weiterhilft.

Antwort

23

Sie suchen nach dem fourth parameter of the FileStream Constructor.

public FileStream(
    string path, 
    FileMode mode, 
    FileAccess access, 
    FileShare share 
) 

So in Ihrem Fall:

FileStream BinaryFile = new FileStream(dpath, FileMode.Create, 
             FileAccess.Write, FileShare.None); 

FileShare -Enum:

enthält Konstanten zur Steuerung der Art des Zugriffs anderen Filestream Objekte in derselben Datei haben.

Mitglieder:

  • Keine, Abnahmen Austausch der aktuellen Datei. Jede Anforderung zum Öffnen der Datei (durch diesen Prozess oder einen anderen Prozess) wird fehlschlagen, bis die Datei geschlossen wird.
  • Lesen, Erlaubt das nachfolgende Öffnen der Datei zum Lesen. Wenn dieses Flag nicht angegeben wird, schlägt jede Anforderung zum Öffnen der Datei zum Lesen (durch diesen Prozess oder einen anderen Prozess) fehl, bis die Datei geschlossen wird. Wenn dieses Flag jedoch angegeben wird, sind möglicherweise weiterhin Berechtigungen erforderlich, um auf die Datei zuzugreifen.
  • Schreiben, Erlaubt das anschließende Öffnen der Datei zum Schreiben. Wenn dieses Flag nicht angegeben wird, schlägt jede Anforderung zum Öffnen der Datei zum Schreiben (durch diesen Prozess oder einen anderen Prozess) fehl, bis die Datei geschlossen wird. Wenn dieses Flag jedoch angegeben wird, sind möglicherweise weiterhin Berechtigungen erforderlich, um auf die Datei zuzugreifen.
  • ReadWrite, Erlaubt das nachfolgende Öffnen der Datei zum Lesen oder Schreiben. Wenn dieses Flag nicht angegeben ist, wird jede Anforderung zum Öffnen der Datei zum Lesen oder Schreiben (durch diesen Prozess oder einen anderen Prozess) fehlschlagen, bis die Datei geschlossen wird. Wenn dieses Flag jedoch angegeben wird, sind möglicherweise weiterhin Berechtigungen erforderlich, um auf die Datei zuzugreifen.
  • Löschen, Erlaubt das nachfolgende Löschen einer Datei.
  • Inheritable, macht die Datei vererbar von untergeordneten Prozessen. Dies wird von Win32 nicht direkt unterstützt.
-1

Ich weiß nicht, ob es möglich ist.

Zum Beispiel speichert Firefox Dateien während des Herunterladens mit einem anderen Namen, bis sie fertig sind. Wenn alles vorhanden ist, wird es in den ursprünglichen Namen umbenannt. Ein anderes Dateisuffix vermeidet, dass Benutzer versuchen, es mit einem Doppelklick zu öffnen.

Verwandte Themen