C# Logdatei von Drittprogramm im Schreibzugriff - wie auslesen?

Smagjus

Vice Admiral
Registriert
Feb. 2011
Beiträge
6.146
Hallo,

ich wende mich nochmal an euch: Ein fremdes Programm schreibt regelmäßig in eine Logdatei, welche ich via C# auslesen möchte. Notepad kann diese problemlos öffnen UND lesen, also sollte sich das via C# doch auch einrichten lassen oder?

Code:
        static void Main(string[] args)        {
            var stream = File.Open(FileName, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
            var sr = new StreamReader(stream);
            Console.WriteLine(sr.Read());
            Console.Read();
        }

Der Code dient erstmal nur zu Testzwecken. Die Datei lässt sich dank FileShare.ReadWrite schon einmal öffnen. Allerdings bekomme ich beim Leseversuch die Ausnahme:

Code:
Der Prozess kann nicht auf die Datei zugreifen, da ein anderer Prozess einen Teil der Datei gesperrt hat.
Wenn aber Notepad mir die gesamte Datei anzeigt, dann müsste ich das doch auch bekommen? Tatsächlich bekomme ich aber nur das Testbyte angezeigt, wenn das externe Programm nicht läuft.

Wo ist der Denkfehler?
 
Du bist wahrscheinlich im Argument verrutscht. FileMode.Open macht, was du beschreibst. Öffne ich die Datei mit FileShare.Read, bekomme ich gleich in der erste Zeile den Fehler. Denn FileShare.Read heißt, dass ich versuche die Datei für andere Prozesse zum Schreiben zu sperren, was definitiv nicht gehen kann.

Die Zeile, die den Fehler abwirft, ist die 4. - das wollte ich eigentlich zu Beginn dazuschreiben.
 
Wird diese Logdatei von Log4Net angelegt?
So wie es aussieht ist ein lock auf der Datei - da kannst du so erstmal nichts machen.
 
Hör ich zum ersten Mal, aber dass die "lockende" Anwendung auf Java basiert, wird diesen Fall wohl unwahrscheinlich machen?

Was ich halt nicht verstehe ist, dass Notepad keine Probleme hat, solange ich nicht versuche, die Datei zu ändern. Ergo müsste es doch einen Weg geben, evtl. auch einen unsauberen.
 
var stream = new FileStream(file, FileMode.Open, FileAccess.Read);
 
Eine Datei kann nicht von zwei verschiedenen Prozessen zum schreiben aufgemacht werden. Das kann einfach nicht gehen weil das Datensalat gibt. Notepad kann die Datei LESEN, aber sobald du in Notepad die Datei speichern aka schreiben willst, geht es auch nicht mehr.

Du kannst eine Date die von einem anderen Programm geschrieben wird immer nur lesend öffnen. Was Notepad macht.
Hast du überhaupt geprüft ob Zeile 2-4 irgendwo einen Fehler zurückgibt?
 
Zurück
Oben