将DataGrid数据保存到文本文件时生成空文件问题排查
问题修复:DataGridView数据保存到文本文件为空的解决方法
核心问题分析
你的代码里**StreamWriter.Write的用法错误**是导致文件为空的直接原因:
sw.Write(" ", dataGridView1.Rows[i].Cells[j].Value.ToString() + " " + "|");
这里误用了带格式参数的Write重载,第一个参数是格式字符串(你写的是制表符),第二个参数的内容根本没被输出,相当于只写了一个制表符,且单元格值为空时还会触发空引用异常。
修复后的完整代码
private void button3_Click(object sender, EventArgs e) { SaveFileDialog sfd = new SaveFileDialog(); sfd.FileName = "untitled.txt"; sfd.DefaultExt = "txt"; sfd.Filter = "txt files (*.txt)|*.txt"; // 修正Filter格式错误 if (sfd.ShowDialog() == DialogResult.OK) { // 使用using语句自动释放流资源,无需手动Close using (Stream fileStream = sfd.OpenFile()) using (StreamWriter sw = new StreamWriter(fileStream)) { // 遍历行,若DataGridView允许添加新行,Rows.Count-1是正确的;否则直接用Rows.Count for (int i = 0; i < dataGridView1.Rows.Count - 1; i++) { for (int j = 0; j < dataGridView1.Columns.Count; j++) { // 先判断单元格值是否为空,避免空引用异常 string cellValue = dataGridView1.Rows[i].Cells[j].Value?.ToString() ?? string.Empty; sw.Write($"{cellValue}\t|"); // 直接写入内容,字符串插值更清晰 } sw.WriteLine(); // 换行,无需传空字符串 } } } }
额外优化点
- 修正
SaveFileDialog.Filter的错误:原代码里的*.text和*.txt*都是无效格式,正确格式为"描述|扩展名" - 使用
using语句管理流资源,自动释放文件句柄,避免手动关闭可能出现的异常 - 添加单元格值为空的判断,防止空引用异常
- 用字符串插值替代字符串拼接,代码可读性更高
内容的提问来源于stack exchange,提问作者Eleventeen
相关产品推荐
相关产品推荐

