Entwickler-Ecke

IO, XML und Registry - Prozess kann nicht gestartet werden


Csharp-programmierer - Mo 23.01.17 18:32
Titel: Prozess kann nicht gestartet werden
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?


Ralf Jansen - Mo 23.01.17 22:21

Schalt mal deinen Virenscanner temporär aus und probier nochmal.


Csharp-programmierer - Mo 23.01.17 22:37

Ich habe ihn jetzt komplett deaktiviert, aber das Problem kommt immer noch :(


jfheins - 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 - 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?


Ralf Jansen - 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 - 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?


Ralf Jansen - 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.