Textdatei lesen in die gerade geschrieben wird
-
Hi,
kennt jemand ne möglichkeit eine Textdatei lesend zu öffnen in die gerade ein anderer Prozess schreibt?
Ich will ein logfile zur Laufzeit auswerten bin aber nicht sicher ob es nicht die ganze Zeit reserviert bleibt.Mein Code zum kontinuierlichen befüllen der Textdatei:
FileStream fs = new FileStream("c:\\MyTextFile.txt", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.Read); StreamWriter sw; sw = new StreamWriter(fs); for (int i = 0; i < 100; i++) { sw.WriteLine("test"); sw.Flush(); System.Threading.Thread.Sleep(1000); } sw.Close(); Console.WriteLine("File Created SucacessFully");
So versuche ich aktuell auf die textdatei zuzugreifen
FileStream fs = new FileStream("c:\\MyTextFile.txt", FileMode.Open, FileAccess.Read, FileShare.Read); StreamReader SR = new StreamReader(fs); Console.WriteLine(SR.ReadLine()); SR.Close();
hat jemand ne idee was ich anders machen könnt?
-
Jo, mit Threads. Der eine Thread liest, der andere Thread schreibt.Pass aber bei der synchroniesierung auf. Schau mal nach dem "lock" Befehl.
-
Du musst beim lesenden Teil Share=Read/Write angeben, sonst kann der das nicht aufmachen.
-
Firefighter schrieb:
Jo, mit Threads. Der eine Thread liest, der andere Thread schreibt.Pass aber bei der synchroniesierung auf. Schau mal nach dem "lock" Befehl.
Das sind zwei getrennte Anwendunge, ich habe also leider keine Möglichkeit das zu kontrollieren
hustbaer schrieb:
Du musst beim lesenden Teil Share=Read/Write angeben, sonst kann der das nicht aufmachen.
Hat geholfen danke. Hier nochmal das fertige Code Schnipsel für den lesenden Teil des Programms:
public Program() { BinaryReader br = new BinaryReader(File.Open("c:\\text.txt", FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite)); long length = br.BaseStream.Length; text = br.ReadChars((int)length); int prev = 0; for (int n = 0; n< text.Length; n++) { if (text[n] == '\n') { Console.WriteLine(prev + " " + n + " " + getSubString(prev,n)); prev = n+1; } } br.Close(); } public String getSubString(int i, int j) { String s = ""; for (int n = i;n <= j; n++) { s += text[n]; } return s; }
Ich hab das diesmal mit BinaryReader gemacht weil es wohl geschwindigkeitsvorteile bringt (noch nicht getestet und in der speziellen art wie ich das jetzt mache sicher suboptimal
, aber is ja nur ein testprog)
danke nochmal für die schnelle hilfe
mfg Taelan