使用C#将二维数组写入CSV时部分单元格缺失的求助
解决C# StreamWriter写入CSV时数组末尾值丢失的问题
我一眼就看出问题所在啦——你代码里的StreamWriter没有被正确关闭或刷新!这是IO操作里超常见的小坑,因为StreamWriter会把数据暂存在缓冲区里,缓冲区没满的话不会自动把数据写入磁盘,导致末尾的部分数据一直留在缓冲区里,没机会被写到文件里。
问题根源拆解
你控制台能完整打印出myArray的所有值,说明数据本身完全没问题,但写入CSV时末尾丢值,核心原因就是StreamWriter的缓冲区没有被清空,程序结束时缓冲区里剩余的内容没被写入文件。你的代码只创建了StreamWriter并写入数据,但既没调用Flush()强制刷新缓冲区,也没调用Close()关闭文件,更没用C#里推荐的资源管理方式来自动处理这些操作。
修复方案(两种可选)
方案1:使用using语句(推荐最佳实践)
using语句会自动帮你处理资源释放,包括刷新缓冲区和关闭文件,不用手动操心:
private static void CreateuCSV(double[,] myArray) { // using语句会在代码块结束时自动释放StreamWriter资源 using (StreamWriter file = new StreamWriter("location")) { for (int i = 0; i < 12; i++) { for (int j = 0; j < 480; j++) { file.Write(myArray[i,j]); file.Write(","); } file.Write("\n"); } } // 这里会自动执行file.Flush()和file.Close() }
方案2:手动调用刷新和关闭
如果你不想用using,也可以手动在写入完成后刷新缓冲区并关闭文件:
private static void CreateuCSV(double[,] myArray) { StreamWriter file = new StreamWriter("location"); try { for (int i = 0; i < 12; i++) { for (int j = 0; j < 480; j++) { file.Write(myArray[i,j]); file.Write(","); } file.Write("\n"); } // 强制把缓冲区里的所有数据写入磁盘 file.Flush(); } finally { // 确保无论是否出错,文件都会被关闭 file.Close(); } }
额外优化小建议
你当前的写法会让每一行末尾多一个逗号,可能导致CSV解析工具识别出多余的空列,推荐调整成更简洁的写法避免这个问题:
private static void CreateuCSV(double[,] myArray) { using (StreamWriter file = new StreamWriter("location")) { for (int i = 0; i < 12; i++) { string[] rowValues = new string[480]; for (int j = 0; j < 480; j++) { rowValues[j] = myArray[i,j].ToString(); } // 用逗号拼接整行,自动避免末尾多余逗号 file.WriteLine(string.Join(",", rowValues)); } } }
内容的提问来源于stack exchange,提问作者Samuel Ogletree
相关产品推荐
相关产品推荐

