C#:StreamReader无法读取末尾含空值的行如何处理?
解决StreamReader读取末尾带空值的分隔行问题
你遇到的问题其实不是StreamReader读不了那一行,而是分割字符串时默认丢掉了末尾的空值,咱们一步步来搞定:
问题根源
默认的string.Split('|')方法会自动忽略末尾的空条目,所以第4行123456785|DUSTIN|PEDROIA|01/01/83|BASEBALL|在分割后,最后那个空字段会被丢掉,导致你拿到的字段数比预期少。
解决方案:用Split重载保留所有空值
只需要在分割时指定StringSplitOptions.None参数,就能强制保留所有分割结果,包括开头、中间和末尾的空字符串。
下面是完整的读取+分割代码示例:
using (StreamReader reader = new StreamReader("你的文件路径.txt")) { string line; while ((line = reader.ReadLine()) != null) { // 关键:通过StringSplitOptions.None保留所有空字段 string[] fields = line.Split(new[] { '|' }, StringSplitOptions.None); // 现在fields数组会包含所有6个字段,第5个索引(从0开始)是空字符串 // 这里可以添加你的字段处理逻辑 Console.WriteLine($"处理行:{line},字段数:{fields.Length}"); } }
额外提示
如果你的文件后续可能出现复杂场景(比如字段里包含|、引号或者换行),建议用专门的分隔符解析库(比如CsvHelper),它能更稳健地处理各种边缘情况。但针对你现在的简单场景,上面的Split方法完全够用。
内容的提问来源于stack exchange,提问作者Kushal
相关产品推荐
相关产品推荐

