2016-05-12 12 views
0

Ich habe eine Schleife, die nach XML-Dateien scannt, wenn es Erfolg in Schleife und ändern Sie die Zeichenfolgen. Problem ist, dass ich den Beitrag nicht schreiben kann, weil ich eine Warndatei benutzt habe. Wie behebe ich das?Kann nicht in Datei schreiben C#

Loop:

var dir = new DirectoryInfo(@"C:\Projektdata"); 
foreach (var file in dir.EnumerateFiles("*.xml", SearchOption.AllDirectories)) 
{    
    foreach (string line in File.ReadLines(file.DirectoryName + @"\" + file)) 
    { 
     . . . . 

Abschnitt Datei schreiben:

string directoryPath = file.DirectoryName + @"\" + file; 

StreamWriter writer = new StreamWriter(directoryPath); 

writer.WriteLine(source);            

writer.Close(); 

Antwort

0

Verwenden Sie es in einer using Richtlinie:

using(var writer = new StreamWriter(directoryPath)) 
{ 
    writer.WriteLine(source);            
} 

Wenn der Fehler immer noch auftritt, versuchen Sie die string zu retten in eine Variable und verwende diesen Schreibprozess außerhalb des Gültigkeitsbereichs von foreach Iterationen. (Da die foreachIteration die Datei zeilenweise liest, bedeutet dies, dass die Datei geöffnet ist.)

0

Sie können nicht in eine geöffnete Datei schreiben. Sie haben die gleiche Datei bereits zum Lesen geöffnet.

File.ReadLines(file.DirectoryName + @"\" + file); 

und

string directoryPath = file.DirectoryName + @"\" + file; 
StreamWriter writer = new StreamWriter(directoryPath); 

File.ReadLines() wird, um eine Rückkehr IEnumerable<string> und wird jede Zeile ergeben. Innerhalb der Schleife ist die Datei also noch offen. Angenommen, das Schreiben ist innerhalb der Schleife.