C# 当我试图将控制台输出重定向到一个文件时,为什么我的代码会写一个空白文件?
我已经编写了一个控制台应用程序的“Windows服务”版本。由于控制台不可见,我想将控制台上显示的文本重定向到一个文件 为此,我编写了以下代码: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
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。