You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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");
    }
}

关键修改说明

  1. using语句管理流:自动释放StreamWriter资源,确保所有写入数据刷新到磁盘,避免未关闭流导致的读取异常。
  2. 输入时直接计数:在循环中统计有效输入的行数,无需事后读取文件,既高效又准确。
  3. 严格的输入判断:用string.IsNullOrWhiteSpace过滤空白或全空格的输入,避免无效内容写入文件。
  4. 移除硬编码路径:统一使用传入的filename参数,保证读写操作指向同一个文件。

内容的提问来源于stack exchange,提问作者Uuno Purhaturo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 15:50:15