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

将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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 11:06:18