Autor |
Beitrag |
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Mo 23.01.17 18:32
Hallo Forum,
ich habe gerade ein Problem: Ich brauche einen Wert von einer Datei (über StreamReader in einem Using-Block). Danach wird der Stream geschlossen und über einen neuen Using Block wird ein StreamWriter erzeigt, der die neuen Daten in die Datei schreit, dass schaut dann so aus:
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:
| using (StreamReader reader = new StreamReader(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mainlysoft", "mainlysoft_devassist.txt"))) { InstallationsPfad = Path.Combine(reader.ReadLine(), "Mainlysoft Devassist"); if (InstallationsPfad != "") { x1 = reader.ReadLine(); c2 = reader.ReadLine(); reader.Close(); ReadSuccessful = true; } }
if (ReadSuccessful == true) { using (StreamWriter writer = new StreamWriter(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "Mainlysoft", "mainlysoft_devassist.txt"))) { writer.WriteLine(InstallationsPfad); writer.WriteLine(x1); writer.WriteLine(c2); writer.WriteLine("update installed"); writer.Close(); } } |
Ich schließe ja den ersten Strem, aber ich bekomme diesen Fehler: Es kann auf die Datei nicht zugegriffen werden, da sie von einem anderen Prozess verwendet wird. Wie kann das sein? Ich schließe ja den ersten Stream?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Mo 23.01.17 22:21
Schalt mal deinen Virenscanner temporär aus und probier nochmal.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Mo 23.01.17 22:37
Ich habe ihn jetzt komplett deaktiviert, aber das Problem kommt immer noch
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
jfheins
Beiträge: 918
Erhaltene Danke: 158
Win 10
VS 2013, VS2015
|
Verfasst: Mo 23.01.17 22:44
Du könntest das Problem vermutlich umgehen, indem du die Datei mit Lese- und Schreibrechten öffnest und alles über einen Stream laufen lässt.
Davon abgesehen, erkenne ich gerade keinen Grund, warum das nicht gehen sollte. Ich nehme mal an, du hast auf die Datei Schreibrechte?
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Di 24.01.17 15:43
Wenn ich jetzt einen einzigen FileStrem nutze, der sowohl schreibt, als auch liest, welchen FileMode muss ich diesem Stream dann geben?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 24.01.17 18:48
FileMode hat eigentlich nix mit lesen/schreiben zu tun. Am ehesten passt FileMode.Open. FileAccess sollte du auf ReadWrite setzen.
|
|
Csharp-programmierer
Beiträge: 696
Erhaltene Danke: 10
Windows 8.1
C# (VS 2013)
|
Verfasst: Di 24.01.17 20:19
Vielen Dank, jetzt funktioniert alles. Aber nochmal zum Verständnis, wie kann es sein, dass es überhaupt zu diesem Fehler kam. In einem Using Block wird ja der Stream automatisch geschlossen, oder wie?
_________________ "Wer keinen Sinn im Leben sieht, ist nicht nur unglücklich, sondern kaum lebensfähig" - Albert Einstein
|
|
Ralf Jansen
Beiträge: 4705
Erhaltene Danke: 991
VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
|
Verfasst: Di 24.01.17 21:42
Ich weiß es nicht. Einfach ein FileStream mehrfach hintereinander öffnen, schließen, öffnen geht egal ob direkt oder indirekt über einen StreamReader/Writer. Und dein Code, zumindest den Teil den du zeigst, sieht soweit korrekt aus (das Close ist überflüssig aber auch nicht schlimm).
Wenn es solche Probleme gibt sind es üblicherweise pseudoclevere selbstsüchtige Programme die sich sofort an Filesystem Objekte hängen um selbst was mit den Files zu tun. Also Antivirenprogramme oder CloudStorage Müll wie DropBox etc.
|
|