在Unity中使用C#向CSV文件写入数据无内容是什么问题?
问题原因及解决方案
核心问题点
你遇到的文件生成但无内容的问题,核心原因是StreamWriter的缓冲区内容没有被刷新到磁盘,具体问题如下:
- StreamWriter默认自带内存缓冲区,你调用的
WriteLine只是把内容写入了内存缓冲区,没有主动触发刷盘操作的话,内容不会真正写入到磁盘文件中 - 你的代码在写完所有内容后,既没有手动调用
writer.Flush()刷盘,也没有正确释放StreamWriter对象,导致缓冲区内容一直滞留在内存中,最终只生成了空文件 - 另外路径拼接逻辑存在隐患:直接对
Application.dataPath做字符串拼接缺少路径分隔符,可能会生成非法路径,导致你找到的不是实际生成的目标文件
修复方案
推荐使用using语句包裹StreamWriter的创建逻辑,using会在代码块执行结束后自动释放StreamWriter资源,释放过程会自动触发缓冲区刷盘,同时自动关闭文件流,不需要手动编写释放逻辑。
修复后的代码示例如下:
{ // 用Path.Combine拼接路径,自动适配不同平台的路径分隔符 // 注意:打包后Application.dataPath是只读路径,存储用户数据建议改为Application.persistentDataPath string newFileName = Path.Combine(Application.dataPath, "highscore.csv"); // using会自动处理资源释放 using (StreamWriter writer = new StreamWriter(newFileName)) { writer.WriteLine("Score,Time"); for (int i = 0; i < 5; i++) { writer.WriteLine(scoresAndSeconds[i, 0].ToString() + "," + scoresAndSeconds[i, 1].ToString()); } } }
可选修复方式
如果不想使用using语句,也可以在写完所有内容后,手动调用writer.Flush()刷盘,再调用writer.Close()关闭文件流,效果完全一致。
内容的提问来源于stack exchange,提问作者shadowgamer99
相关产品推荐
相关产品推荐

