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
相关产品推荐
相关产品推荐

