C#文本文件行数统计功能异常求助:程序计数模块失效排查
解决C#文本文件行数统计错误的问题
问题根源分析
你的代码存在几个关键问题导致行数统计异常:
- 写入流未关闭就读取文件:
StreamWriter的缓冲区数据还没刷新到磁盘就调用File.ReadLines,读取的内容不完整。 - 空白行被错误计入:最后一次输入的空白内容也被写入文件,导致统计行数多1。
- 硬编码文件路径:固定路径和传入的
filename参数不一致,可能读取的不是当前写入的文件。 - 重复读文件效率低下:完全可以在输入过程中直接计数,无需事后读取文件。
修正后的代码
internal class Program { private static void WriteNumbers(string filename) { try { // 使用using自动管理流资源,确保缓冲区数据写入磁盘并关闭流 using (StreamWriter sw = new StreamWriter(filename)) { Console.WriteLine("Write numbers, [Enter] ends the loop"); string input = Console.ReadLine(); int lineCount = 0; // 仅当输入非空时才写入并计数 while (!string.IsNullOrWhiteSpace(input)) { sw.WriteLine(input); lineCount++; Console.WriteLine("Write a new number:"); input = Console.ReadLine(); } // 直接使用输入时统计的结果,无需再次读取文件 Console.WriteLine($"Thank you, you added {lineCount} numbers into the file!"); } } catch (Exception ex) { Console.WriteLine($"Something went wrong, terminating in 10 seconds. Error: {ex.Message}"); } } static void Main(string[] args) { WriteNumbers("numbers.txt"); } }
关键修改说明
using语句管理流:自动释放StreamWriter资源,确保所有写入数据刷新到磁盘,避免未关闭流导致的读取异常。- 输入时直接计数:在循环中统计有效输入的行数,无需事后读取文件,既高效又准确。
- 严格的输入判断:用
string.IsNullOrWhiteSpace过滤空白或全空格的输入,避免无效内容写入文件。 - 移除硬编码路径:统一使用传入的
filename参数,保证读写操作指向同一个文件。
内容的提问来源于stack exchange,提问作者Uuno Purhaturo
相关产品推荐
相关产品推荐

