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)(GBK)StreamWriter 构造函数里 encoding 参数很关键中文乱码不是因为没保存,而是保存时用了系统默认编码(如 GBK),但你用记事本/VS Code 默认以 UTF-8 打开 ------ 两者对不上。 Murf AI AI文本转语音生成工具

相关推荐
m0_587383003 分钟前
碰碰好评卡功能落地全流程实战指南 附核心逻辑与常见问题解决方案
java·前端·数据库·后端·struts·需求分析
Y3815326626 分钟前
SerpBase + RAG 实战:用搜索 API 给知识库接上实时数据,回答不再过期
java·服务器·数据库
骑着蜗牛撵大象3276 分钟前
SQL 编辑器不是高级记事本:KStudio 与 KSQL Developer 里的建表与增删改查手法
数据库·sql·mysql·编辑器·crud·执行计划
XZ-07000111 分钟前
week8-代码解析2
python
Access开发易登软件12 分钟前
我全新开发了一套 Access 通用 Excel 导入工具,现在开源了
数据库·microsoft·excel·mfc·vba·access·access开发
小虎牙^O^15 分钟前
棋盘格隐写:基于奇偶相位的双图隐藏与还原
图像处理·python·安全
笃行35019 分钟前
SQL编辑器的隐藏技能:KingbaseES 配套 KSQL Developer 使用笔记
数据库
薛定猫AI22 分钟前
【技术干货】基于本地优先架构的开源AI智能体Octopus系统设计与实战解析
python·机器学习·ai·大模型·技术实战
用户0942485680334 分钟前
第37章:JVM极端场景调优与生产故障复盘方法论
java·jvm
努力进修36 分钟前
时序数据长期承载难题:从压缩、批量写入到数据组织优化
java·开发语言·数据库