Autor Beitrag
dadom85
Hält's aus hier
Beiträge: 1



BeitragVerfasst: Fr 15.11.13 15:20 
Hallo zusammen,

ich bin neu in C# und .NET und deswegen bei einem Problem zum Thema Dateizugriff etwas überfragt.
Ich habe vor kurzem die Weiterentwicklung einer Webseite/Anwendung übernommen Die Application greift momentan auf eine Datei zu die einfach geöffnet wird, die Zahl darin inkrementiert wird, erneut gespeichert und dann wieder geschlossen. Dies passiert jedesmal wenn ein user über einen Submit-Button eine Anfrage startet und die ID wird dazu verwendet um die Anfrage eindeutig zu identifizieren.

ausblenden C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
            string path = pPage.Server.MapPath("ID_No");
            TextReader reader = File.OpenText(path + "/count1.txt");
            int number = int.Parse(reader.ReadLine());
            number = number + 1;
            reader.Close();
            TextWriter writer = new StreamWriter(path + "/count1.txt");
            writer.WriteLine(number);
            writer.Close();
            return number;

Ich habe nicht das Gefühl dass das Vorgehen multi-user safe ist. Ist das korrekt? Wenn ja wie könnte ich das ganze schnell Multi-User Safe machen. Ist das überhaupt über eine File handlebar oder benötige ich dazu eine DB?

Danke schonmal für eure Hilfe

Viele Grüße

Dominik

Moderiert von user profile iconTh69: C#-Tags hinzugefügt
Ralf Jansen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 4700
Erhaltene Danke: 991


VS2010 Pro, VS2012 Pro, VS2013 Pro, VS2015 Pro, Delphi 7 Pro
BeitragVerfasst: Fr 15.11.13 15:51 
Zitat:
Ich habe nicht das Gefühl dass das Vorgehen multi-user safe ist. Ist das korrekt?


Ja

a.) Ein weitere öffnen der Datei während TextWriter/TextReader offen ist würde hier eine Exception auslösen die nicht behandelt wird. (Das sollte man auf jedenfall nachholen hier bleiben sonst potentiell Filehandles offen. Siehe using )
b.) Ein Threadwechsel genau zwischen schließen des Readers und öffnen des Writers könnte ein falsches zählen verursachen.

Simpelste Lösung den Code in einen gemeinsamen Lock zu packen.