如何在C#中写入每行长度固定的文本文件?
固定行宽文本文件写入的通用解决方案
需求说明
要将数据写入文本文件,要求所有行长度完全一致(不足部分自动补空格),确保后续可以精准读取任意指定行。当前使用的代码无法实现该效果,手动补空格的方式不具备通用性。
当前代码:
StreamWriter stw = File.CreateText("output.txt"); foreach (var result in resultData) { stw.WriteLine($"{result.Value}:{result.Date}"); }
通用实现方案
核心是利用C#的字符串格式化/填充功能,为每个数据段设置固定宽度,以下提供两种实用方案:
方案1:预设固定宽度(适合已知数据长度范围的场景)
直接在字符串插值中使用对齐语法,指定每个字段的占用宽度,不足部分自动补空格:
// 用using自动管理文件资源,避免遗漏关闭 using (StreamWriter stw = File.CreateText("output.txt")) { foreach (var result in resultData) { // -15表示左对齐占15个字符,-20表示左对齐占20个字符,可按需调整宽度 string fixedWidthLine = $"{result.Value,-15}:{result.Date,-20}"; stw.WriteLine(fixedWidthLine); } }
如果需要右对齐,去掉数字前的负号即可,比如{result.Value,15}
方案2:动态计算最大宽度(适配任意数据长度的通用场景)
先遍历所有数据,计算出每个字段的最大长度,再以此为基准填充空格,确保每行长度一致:
if (!resultData.Any()) return; // 计算Value和Date字段的最大字符长度 int maxValueLen = resultData.Max(r => r.Value.ToString().Length); int maxDateLen = resultData.Max(r => r.Date.ToString().Length); using (StreamWriter stw = File.CreateText("output.txt")) { foreach (var result in resultData) { // PadRight将字符串填充到指定长度,不足补空格 string valueSegment = result.Value.ToString().PadRight(maxValueLen); string dateSegment = result.Date.ToString().PadRight(maxDateLen); stw.WriteLine($"{valueSegment}:{dateSegment}"); } }
若需要右对齐,替换PadRight为PadLeft即可
内容的提问来源于stack exchange,提问作者vin
相关产品推荐
相关产品推荐

