2011-01-13 12 views
45

Ich benutze System.IO.File.Create, um eine Datei zu erstellen. Ich schreibe nicht mit einem Stream-Writer darauf, sondern erstelle es einfach.System.IO.File.Create Sperren einer Datei

Ich bekomme einen Serverfehler im Frontend, wenn die Anwendung versucht, die neu erstellte Datei zu öffnen - dass die Datei verwendet wird. Müllsammlung scheint dann zu kommen und ein paar Minuten später ist alles in Ordnung.

Jetzt weiß ich, wenn ich Streamwriter verwenden würde, müsste ich es schließen. Gilt das auch für das Erstellen?

Ich habe gelesen, dass das Öffnen eines Stream-Writer zu der Datei dann sofort schließen es wird das beheben, aber es scheint chaotisch. Gibt es einen einfacheren Weg?

+0

den Code Mal sehen – Kev

Antwort

64

File.Create eine FileStream zurückgibt. Sie sollten es wie folgt verwenden:

using (FileStream fs = File.Create(path)) 
{ 
    //you can use the filstream here to put stuff in the file if you want to 
} 
+1

Ich würde nie das erwartet haben. – Traubenfuchs

11

Das Erstellen der Datei öffnet eine zu ihm, daher, es zu sperren (File.Create gibt die FileStream zurück).

Sie müssen diesen Stream schließen, um auf die Datei zugreifen zu können. Dies wird am besten mit einer using Aussage:

using(FileStream fs = File.Create(path)) 
{ 
} 
1

Die Create Methode wird ein Datei-Handle zurück. Das Dateihandle sollte vor dem erneuten Verwenden der Datei geschlossen werden. Einzelheiten finden Sie im MSDN-Artikel File.Create Method (String).

Zusammenfassung:

Das Filestream-Objekt durch dieses Verfahren erzeugt einen Standardwert von Fileshare keine hat; Kein anderer Prozess oder Code kann auf die erstellte Datei zugreifen, bis das ursprüngliche Dateihandle geschlossen wird.

8

Wenn File.Create mit bekommen Sie ein FileStream zurückgegeben. Solange Sie den Stream nicht schließen oder bis das Objekt FileStream entsorgt wird (durch den Finisher des Garbage Collectors), bleibt es geöffnet und gesperrt.

FileStream implementiert IDisposable so können Sie wie folgt vorgehen:

using(FileStream fs = File.Create(filename)) 
{ 
    // Do stuff like write to the file 
} 

Die using Aussage ist "syntaktischer Zucker" und bewirkt, dass der Compiler Code generieren, die funktional äquivalent zu ist:

FileStream fs = File.Create(filename) 
try 
{ 
    // Do stuff like write to the file 
} 
finally 
{ 
    fs.Dispose(); 
} 

Die Dispose Methode ruft Close intern auf.

1

Ich war mit: System.IO.File.Create(sFullFileName);

Die obige .Create Methode nicht geschlossen wurde, die Datei

Ich verwende jetzt: System.IO.File.WriteAllText(sFullFileName, "Uploading");

Diese Methode erstellt und schließt die Datei (Anmerkung: ich setzen Zeichenfolge "Hochladen" in der Datei, aber ich bin sicher string.Empty wird auch funktionieren.

80

Versuchen Sie folgendes:

System.IO.File.Create(FullFName).Close(); 
+1

Dies ist ideal, wenn Sie nur eine leere Datei erstellen möchten. – TTT

+1

Das ist so wahr! "Ich schreibe nicht mit einem Stream-Writer, nur um es zu erstellen". –

+0

Das war, was ich auch suchte. Funktioniert ein Charme mit einer leeren Datei. Vielen Dank. –