2016-10-27 1 views
0

Wie mit dieser Ausnahme umzugehen ist. Ich habe eine Textdatei. Und dieser Code schreibt die Datei alle 3 Sekunden neu. Gleichzeitig liest eine andere MS-Excel-Datei die Daten aus der Datei. Und manchmal bekomme ich diese Ausnahme.Umgang mit Dateiausnahme: kann nicht auf die Datei zugreifen, da sie von einem anderen Prozess verwendet wird

Gibt es eine Möglichkeit für StreamWriter zu warten, bis MS Excel das Lesen der Datei beendet und beginnt, die Datei direkt danach neu zu schreiben?

string path = @"C:\My Path\my_file.txt"; 

using (StreamWriter fs = new StreamWriter(File.OpenWrite(path))) 
    { 
    fs.Write(text); 
    fs.Close(); 
    } 
+0

Excel wird die Datei nicht freigeben, bis Sie sie schließen. – SLaks

+0

Dies ist der genaue Grund, warum Sie immer eine IO-Ausnahme behandeln sollten – Steve

+0

Nein, Excel liest nur die Daten aus der Textdatei alle 3 Sekunden. Es funktioniert meistens gut, aber ab und an löst es diese Ausnahme aus. – Totallama

Antwort

-1

Dies ist ein Weg:

string path = @"C:\My Path\my_file.txt"; 
string text = "Declare text variable so this code compiles"; 
FileStream fileS = null; 
bool done = false; 
while (!done) 
{ 
    done = true; 

    try 
    { 
     fileS = File.OpenWrite(path); 
    } 
    catch (IOException ex) 
    { 
     done = false; 
    } 
} 

using (StreamWriter fs = new StreamWriter(fileS)) 
{ 
    fs.Write(text); 
    fs.Close(); 
}; 

Ich würde auch in einem StopWatch Gespräch noch nach so langer Zeit die oben while Schleife Timeout haben, und möglicherweise ein kleines Thread.Sleep() so nicht schleudern Sie nicht an volle Geschwindigkeit, während im Wesentlichen versucht, die FileStream Sperre zu erhalten.

Verwandte Themen