MarcusDidius - Sa 04.06.11 11:16
Titel: Prozess kann nicht auf die Datei ... zugreifen
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29:
| class IOAccess { private string fileName = "D:\\ein.txt";
public string read() { string input = ""; FileStream fileStream = new FileStream(fileName, FileMode.Open); StreamReader streamReader = new StreamReader(fileName);
while (streamReader.Peek() != -1) { input += streamReader.ReadLine(); } streamReader.Close(); fileStream.Close();
return input; }
public void write(string output) { FileStream fileStream = new FileStream(fileName, FileMode.Create); StreamWriter streamWriter = new StreamWriter(fileStream); streamWriter.WriteLine(output); streamWriter.Close(); fileStream.Close(); } } |
write funktioniert. Bei Aufruf von read kommt eine IOException mit der Message
"Der Prozess kann nicht auf die Datei D:\ein.txt zugreifen"
Woran kann das liegen? Ich hab doch den Stream geschlossen.
Moderiert von
Christian S.: Code- durch C#-Tags ersetzt
Trashkid2000 - Sa 04.06.11 20:42
Hallo und :welcome:
Das Problem bei der read()-Methode liegt hier:
C#-Quelltext
1: 2:
| FileStream fileStream = new FileStream(fileName, FileMode.Open); StreamReader streamReader = new StreamReader(fileName); |
Du öffnest einen FileStream, der die Datei öffnet. Und dann noch ein StreamReader, der auch die Datei öffnen soll.
Du musst dem StreamReader einfach den fileStream als Übergabeparameter übergeben, damit er von dem geöffneten Stream liest. Also so:
C#-Quelltext
1: 2:
| FileStream fileStream = new FileStream(fileName, FileMode.Open); StreamReader streamReader = new StreamReader(fileStream); |
Und am besten auch
using-Blöcke benutzen, dann sparst Du Dir auch das
Close() bzw. das
Dispose().
Oder aber benutze einfach die statischen Methoden der File-Klasse:
C#-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| public string Read() { return File.ReadAllText(fileName); }
public void Write(string output) { File.WriteAllText(fileName, output); } |
LG, Marko