2009-05-28 11 views
0

Ich habe ein Programm, das etwa wie folgt aussieht:Protokollierung und Flush in .net

public partial class It 
{ 
    static StreamWriter logging 
     = new StreamWriter(new FileStream(@"C:\log",FileMode.Create)); 

    void someFn() 
    { 
     logging.WriteLine("foo"); 
     logging.Flush(); 

     /// killed here in debugger with Shift+F5 
    } 
} 

Das Problem, dass die Datei nicht in „foo“ endet und es scheint, der Flush nicht geschieht. Mißbrauche ich hier etwas? Ich brauche eine "die Bits sind in der Datei, wenn ich zurückkomme" -Funktion, existiert so etwas?

Ideal wäre, dass, wenn ich an diesem Punkt zu brechen, ein anderer Prozess Ballen sein wird, um diese letzte geschriebene Zeile zu sehen.

+0

Ich kann es nicht reproduzieren; Wenn ich Ihren Code ausführen und nach der Protokollierung mit dem Debugger brechen.Flush die Datei enthält "foo". –

+0

Sie sagen die Datei "endet nicht in foo" - was endet es? Gibt es hier einen anderen Code (möglicherweise in einem anderen Thread)? –

+0

Es endet in Sachen, die vor "foo" geloggt wurden: Das Ende der Datei fehlt. Und das ist nicht der genaue Fall, den ich habe. – BCS

Antwort

2

Ich erinnere mich, dass ich dieses Problem auch hatte. Ich glaube, Sie die darunter liegende Filestream zu spülen haben anstatt die Stream

+0

Fud :(das geht ein Schmerz zu sein. – BCS

+0

Nein, Freude. habe nicht bekommen, was ich brauche. (Ich kann nicht genau repro, was ich beschrieben, aber es funktioniert immer noch nicht richtig) – BCS

+0

eine andere Sache, die Sie versuchen können, ist es, den Stream zu öffnen und zu schließen die someFn eher als eine statische Variable.Dies wird definitiv zwingen zu flush. – oscarkuo

1

Ich denke, Ihr Code sollte so funktionieren, wie Sie es erwarten. Ich frage mich, ob Sie den Build-Modus auf Release eingestellt haben und/oder es eine Diskrepanz zwischen dem Quellcode, den Sie im Debugger sehen, und dem Code, der tatsächlich ausgeführt wird, gibt. Wenn das Projekt so konfiguriert ist, dass es im Freigabemodus erstellt wird, verschiebt das Optimierungsprogramm möglicherweise Code, und die Quellzeile, auf der Sie sich befinden, entspricht möglicherweise nicht genau dem, was im optimierten Code passiert.

+0

Ich hoffe wirklich, das ist nicht die Art von Problem, das ich bekomme ... – BCS

0

Können Sie, bitte, diesen Code versuchen, und lassen Sie uns wissen, Ergebnisse:

class Program 
{ 
    static void Main(string[] args) 
    { 
     StreamWriter foo = new StreamWriter(new FileStream(@"C:\foo.txt", FileMode.Create)); 
     foo.WriteLine("foo"); 

     StreamWriter bar = new StreamWriter(new FileStream(@"C:\bar.txt", FileMode.Create)); 
     bar.WriteLine("bar"); 
     bar.Flush(); 
    } 
}