C# 当我试图将控制台输出重定向到一个文件时,为什么我的代码会写一个空白文件?

C# 当我试图将控制台输出重定向到一个文件时,为什么我的代码会写一个空白文件?,c#,.net,file-io,console,windows-services,C#,.net,File Io,Console,Windows Services,我已经编写了一个控制台应用程序的“Windows服务”版本。由于控制台不可见,我想将控制台上显示的文本重定向到一个文件 为此,我编写了以下代码: private void SetupConsoleLogging() { string logFileName = ConfigurationManager.AppSettings["LogFileName"]; FileStream fileStream = new FileStream(logFileName, FileMode.O

我已经编写了一个控制台应用程序的“Windows服务”版本。由于控制台不可见,我想将控制台上显示的文本重定向到一个文件

为此,我编写了以下代码:

private void SetupConsoleLogging()
{
    string logFileName = ConfigurationManager.AppSettings["LogFileName"];
    FileStream fileStream = new FileStream(logFileName, FileMode.OpenOrCreate);
    StreamWriter streamWriter = new StreamWriter(fileStream);
    Console.SetOut(streamWriter);
}
上面的代码是在Windows服务开始时调用的。但是,这只会导致创建一个空白文件

假设程序中没有错误或其他导致程序失败的问题(事件查看器中没有显示任何内容),是什么阻止了将输出写入文件?

您需要(或)您的
StreamWriter
来写入数据:

streamWriter.Close();
您需要(或)您的
StreamWriter
来写出您的数据:

streamWriter.Close();

也许您可以尝试如下设置StreamWriter的属性:

streamWriter.AutoFlush = true;

它将在调用StreamWriter.Write后将缓冲区刷新到底层流。

也许您可以尝试如下设置StreamWriter的属性:

streamWriter.AutoFlush = true;

在调用StreamWriter.Write之后,它会将缓冲区刷新到底层流。

自动执行此操作的任何简单方法,以便在每次遇到
控制台时立即将输出写入文件。WriteLine
?@DanielAllenLangdon,如果我相信您不想使用日志框架
TraceListener
Trace.AutoFlush
属性设置为true将执行您想要的操作。是否有任何简单的方法可以自动执行此操作,以便每次遇到
Console.WriteLine
时立即将输出写入文件?@DanielAllenLangdon如果您不想使用日志框架,我相信
TraceListener
Trace.AutoFlush
属性设置为true将执行您想要的操作。我认为这应该是对@Jay答案的回应。嗯,这是真的。@Danielallengdoni道歉。我读你的答案时一定是睡着了。这是一个单独的解决方案。我被搞糊涂了,没关系@DanielAllenLangdon+1你的答案比我的好得多。谢谢你指出StreamWriter.AutoFlush。我想这应该是对@Jay的回答的回应。嗯,这是真的。@danielallengdoni道歉。我读你的答案时一定是睡着了。这是一个单独的解决方案。我被搞糊涂了,没关系@DanielAllenLangdon+1你的答案比我的好得多。感谢您指出StreamWriter.AutoFlush。