C#: Zweiter StreamReader geht nicht / Fehlermeldung?

3 Antworten

Ich sehe da keinen StreamReader.

Aber der Fehler wird vermutlich daran liegen, dass Du irgendwo ein FileHandle geöffnet und nicht (richtig) geschlossen hast. Ein FileStream verwaltet so ein FileHandle und sowohl StreamReader als auch StreamWriter machen so einen FileStream auf - wenn kein anderer Stream mitgegeben wird.

Windows verwaltet mit den FileHandles intern, welche Zugriffe es auf eine Datei gibt und kann ggf. weitere Zugriffe sperren. Ist z.B nützlich, damit nicht zwei Programme in die selbe Datei schreiben und am Ende nur Schrott bei raus kommt.
Man kann auch einstellen, was mit der Datei geschehen soll und welche Sperren man setzen möchte.

Damit das zuverlässig funktioniert, muss ein Programm den Zugriff aber auch wieder beenden. Deshalb gibt es die Dispose-Methode und das using-Statement, das sollte man möglichst immer nutzen, dann brauchst Du auch kein Close mehr (wird intern aufgerufen).
Windows bekommt das zwar auch irgendwann mit, dass eine Datei nicht mehr freigegeben wird, das macht es aber am Prozess fest. Und .NET gibt das Ding auch irgendwann frei, aber auch nur irgendwann, wenn das Objekt nicht mehr genutzt wird.

Vermutlich machst Du irgendwo die Datei auf, schließt nicht korrekt und willst danach rein schreiben.
Oder Du hast sie mit einem anderen Programm geöffnet, was sie sperrt.

Wenn Du irgendwo "File.Create" nutzt: Die Methode gibt dir einen geöffneten FileStream zurück. Ist ein beliebter Fehler, der bleibt dann nämlich offen, wenn Du ihn nicht schließt.

Woher ich das weiß:Berufserfahrung
KACKBIENCHEN 
Fragesteller
 22.07.2021, 09:24

Danke habe es aber schon gelöst ^^

0

Kann es sein das du in die selbe Datei lesen tust wie du schreiben möchtest ?

Verwende bei sowas immer ein using:

using(var sw = new StreamWriter())
{
 .....
}

Das sorgt immerhin schonmal das am Ende Dispose aufgerufen wird.

Starte mal den Rechner neu.

Wenn der Fehler immer noch auftritt, dann schau dir in Windows an, was auf die Datei zugreift. Mit dem Snap-In "Freigegebene Ordner" der Microsoft Managementconsole kannst du das zum Beispile machen.

Findet sich der Grund in deinem Quelltext, sorge dafür, dass immer nur ein Stream eine Datei offen hält.

Woher ich das weiß:Berufserfahrung – Programmierer