Autor Beitrag
Csharp-programmierer
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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:

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4429
Erhaltene Danke: 906


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Mo 23.01.17 22:21 
Schalt mal deinen Virenscanner temporär aus und probier nochmal.
Csharp-programmierer Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 867
Erhaltene Danke: 144

Win7
VS 2013, VS2015
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4429
Erhaltene Danke: 906


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 696
Erhaltene Danke: 10

Windows 8.1
C# (VS 2013)
BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4429
Erhaltene Danke: 906


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: 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.