2012-03-30 9 views
0
DirectoryInfo dir=new DirectoryInfo(path); 
if (!dir.Exists) 
    { 
     Directory.CreateDirectory(path); 
     File.Create(path + "\\file.xml"); 

     StreamWriter sw =new StreamWriter(path + "\\file.xml"); 
     sw.Flush(); 
     sw.Write("<?xml version='1.0' encoding='utf-8' ?><project></project>"); 
    } 

Fehler verwendet wird:Der Prozess kann nicht auf die Datei zugreifen 'C: file.xml', weil sie von einem anderen Prozess

The process cannot access the file 'C:\file.xml' because it is being used by another process.

warum? Wie kann Datei geschlossen werden?

Antwort

2

From MSDN

Das Filestream-Objekt mit diesem Verfahren erstellt (File.Create) hat einen Standardwert von Fileshare Keine; Kein anderer Prozess oder Code kann auf die erstellte Datei zugreifen, bis das ursprüngliche Dateihandle geschlossen wird.

So ist die Abhilfe ist

using(FileStream fs = File.Create(path + "\\file.xml")) 
    { 
     Byte[] info = new UTF8Encoding(true).GetBytes("<?xml version='1.0' encoding='utf-8' ?><project></project>"); 
     fs.Write(info, 0, info.Length); 
    } 

EDIT: Changed die Schaffung des Stream entfernt und ein Filestream
mit Jedoch habe ich von MSDN wie vorgeschlagen nicht auf diese Weise mögen.
Stream hat einen Konstruktor, der einen Filestream bekommen, aber ich dachte, dass, wenn wir

using(StreamWriter sw = new StreamWriter(File.Create(path + "\\file.xml"))) 
    { 
     sw.Write("<?xml version='1.0' encoding='utf-8' ?><project></project>"); 
    } 

verwenden wir das Sperr Problem zurück. Ich habe es jedoch getestet und es funktioniert.
Wahrscheinlich führt der StreamWriter-Konstruktor einige Tricks für den von File.Create zurückgegebenen FileStream aus.

+0

Fehler: Der Typ 'System.IO.FileStream' kann nicht implizit in 'System.IO.StreamWriter' konvertiert werden. – user1263390

1

Verwendung File.Create oder StreamWriter, nicht beide

+0

bitte eine Probe schreiben, erstellen und dann zu – user1263390

+0

@ user1263390 'Streamwriter sw = new Stream (Pfad + "\\ file.xml", false hinzufügen); ' –

0

sw.Close(); Sie, nachdem Sie Write();

genannt haben können Sie besser dran XmlDocument verwenden. Dann können Sie Knoten wie Knoten usw. anhängen.

XmlDocument verfügt über eine integrierte Speichern-Funktion, so dass Sie nicht wie ein Streamwriter verwalten müssen.

1

ändern

File.Create(path + "\\file.xml"); 

Um

File.Create(path + "\\file.xml").Close(); 
Verwandte Themen