C#怎么将控制台输出保存到TXT_C#如何重定向输出流【源码】

张开发
2026/4/16 0:34:39 15 分钟阅读

分享文章

C#怎么将控制台输出保存到TXT_C#如何重定向输出流【源码】
Console.SetOut重定向到文件最简方式是用using包裹StreamWriter并缓存恢复原输出流RedirectStandardOutput用于拦截外部进程输出需注意编码、线程安全及适用场景。Console.SetOut 重定向到文件最简方式直接用 Console.SetOut 替换默认输出流是 C# 控制台程序保存输出最轻量的方案。它不改原有 Console.WriteLine 调用也不需要逐行写文件。常见错误是忘记关闭 StreamWriter导致文件内容没刷出、末尾缺失或者用完没恢复原 Console.Out影响后续调试输出。必须用 using 块包裹 StreamWriter确保 Dispose() 触发刷新和关闭如果程序中其他地方还依赖控制台输出比如日志、调试语句重定向前先缓存原始 Console.Out结束后手动恢复路径用相对路径时实际写入位置取决于启动目录不是项目根目录或 exe 所在目录var originalOut Console.Out;using (var file new StreamWriter(output.txt)){ Console.SetOut(file); Console.WriteLine(这行会进TXT); Console.WriteLine(这行也是);} // ← 此处自动 Flush CloseConsole.SetOut(originalOut); // 恢复控制台输出RedirectStandardOutput 需要 Process.Start 的场景当你调用的是外部命令比如 dotnet build、git status而不是自己代码里的 Console.WriteLine就得靠 ProcessStartInfo.RedirectStandardOutput true 拦截子进程输出。容易踩的坑是只设了重定向却忘了读取 process.StandardOutput结果子进程卡死管道缓冲区满或者用 ReadToEnd() 阻塞等待但子进程没退出就永远等下去。务必在 process.Start() 后立即开始读取推荐用 BeginOutputReadLine() 事件回调避免阻塞别漏掉 RedirectStandardError true否则错误信息仍打到控制台看起来像“没重定向成功”Windows 下 cmd/powershell 的编码可能不是 UTF-8读取时需显式指定 Encoding.Default 或 Encoding.GetEncoding(936)GBKStreamWriter 构造函数里 encoding 参数很关键中文乱码不是因为没保存而是保存时用了系统默认编码如 GBK但你用记事本/VS Code 默认以 UTF-8 打开 —— 两者对不上。 Murf AI AI文本转语音生成工具

更多文章