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

C#中使用StreamWriter.WriteLine逐行覆盖文本文件失效求助

解决StreamWriter无法修改TopScore.txt的问题

下面是几个大概率能解决问题的方向,按顺序排查:

  • 先确认代码是否真的执行了写入逻辑
    在if (newBestScore == true)里第一行加一句Console.WriteLine("正在写入新最高分");,运行游戏触发新最高分的条件,看看控制台有没有输出这句话。如果没有,说明newBestScore的判断逻辑有问题,根本没进入写入分支,得先修正这个判断。

  • 检查文件路径是否匹配
    你读取时用的是项目根目录的TopScore.txt,但编译后程序默认会把文件复制到bin/Debug或bin/Release目录下运行,StreamWriter写入的是运行目录(也就是bin目录)里的文件,而不是你在VS项目里看到的那个文件。
    可以修改代码明确指定路径,确保读写的是同一个文件:

    if (newBestScore == true)
    {
        DateTime dateToday = DateTime.Now;
        string dateString = dateToday.ToShortDateString();
        string currAttempts = CurrentAttempts.ToString();
        // 获取程序运行的目录,拼接文件路径
        string filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "TopScore.txt");
        using (StreamWriter newTopScore = new StreamWriter(filePath))
        {
            newTopScore.WriteLine(dateString);
            newTopScore.WriteLine(currAttempts);
            newTopScore.WriteLine(timeTaken.Minutes);
            newTopScore.WriteLine(timeTaken.Seconds);
            // using块会自动关闭流,不需要手动调用Close()
        }
    }
    

    另外,在VS里选中项目里的TopScore.txt,右键选「属性」,把「复制到输出目录」设置为「如果较新则复制」,这样每次编译都会把最新的文件复制到bin目录,保证读写的是同一个文件。

  • 权限与流的释放问题
    虽然using块会自动释放流,但如果之前有其他StreamReader没正确关闭,可能导致文件被锁定无法写入。确保读取TopScore.txt时也用using块包裹,比如:

    using (StreamReader reader = new StreamReader("TopScore.txt"))
    {
        // 读取内容的逻辑
    }
    

    这样能保证读取完就释放文件句柄,不会影响后续写入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 05:50:21