.net net中的日志记录和刷新

.net net中的日志记录和刷新,.net,file-io,.net,File Io,我有一个类似这样的程序: 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

我有一个类似这样的程序:

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
    }
}
问题在于文件没有以“
foo
”结尾,而且似乎没有发生刷新。我在这里滥用什么吗?我需要一个“返回时位在文件中”函数,这样的东西存在吗


理想的情况是,如果我在这一点上中断,另一个进程将是查看最后一行的编写情况。

我认为您的代码应该按预期工作。我想知道您是否将构建模式设置为Release和/或在调试器中看到的源代码与实际执行的代码之间存在差异。如果项目设置为在发布模式下构建,那么优化器可能会移动一些代码,并且您所在的源代码行可能无法准确表示优化代码中发生的事情。

我认为您的代码应该按照您的预期工作。我想知道您是否将构建模式设置为Release和/或在调试器中看到的源代码与实际执行的代码之间存在差异。如果项目设置为在发布模式下构建,那么优化器可能会移动一些代码,并且您所在的源代码行可能无法准确表示优化代码中发生的情况。

我记得我也遇到了这个问题。
我认为您必须刷新底层文件流,而不是StreamWriter,我记得我也遇到了这个问题。
我认为您必须刷新底层FileStream,而不是StreamWriter。请尝试以下代码并告诉我们结果:

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();
    }
}

请尝试此代码并让我们知道结果:

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();
    }
}

我无法复制它;如果我运行你的代码并在日志记录后中断调试器。刷新文件包含“foo”。你说文件“不以foo结尾”--它以什么结尾?这里是否涉及其他代码(可能在另一个线程上)?它以“foo”之前记录的内容结尾:文件结尾缺失。这不是我的真实情况,也不能复制。你运行的是什么框架版本?我发现了复制:如果我在调试器(Shift+F5)下关闭应用程序,流不会刷新,我无法复制它;如果我运行你的代码并在日志记录后中断调试器。刷新文件包含“foo”。你说文件“不以foo结尾”--它以什么结尾?这里是否涉及其他代码(可能在另一个线程上)?它以“foo”之前记录的内容结尾:文件结尾缺失。这不是我的真实情况,也不能复制。你在运行什么框架版本?我发现了复制:如果我在调试器(Shift+F5)下关闭应用程序,流不会刷新。Fud:(那会很痛苦。不,joy。也没有得到我需要的。(我不能完全复制我描述的,但它仍然不能正常工作)你可以尝试的另一件事是在someFn中打开和关闭流,而不是作为一个静态变量。这肯定会迫使它刷新。我认为这是最有用的。它变成了一个“它现在工作,所以谁在乎”的问题。fud:(那将是一个痛苦。不,joy。也没有得到我需要的。(我无法准确地重新编写我描述的内容,但它仍然不能正常工作)另一件事是,您可以尝试在someFn中打开和关闭流,而不是作为静态变量。这肯定会迫使它刷新。我认为这是最有帮助的。它变成了“现在可以工作,谁在乎”的问题之一