StreamWriter似乎没有做任何事情?

时间:2018-06-18 02:22:58

标签: c# streamwriter

我有一个读取CSV的程序,并替换其值。

我使用相同的文件,它读取文件,提取数据,填充DataTable,然后重建要重写的数据,没有任何问题,但是当我检查CSV时,它是空的。

如果我使用相同的文件或创建新文件并不重要,它们都会变空。

这是我的写作方法:

void RewriteCSV(DataTable table)
{
    SaveFileDialog sfd = new SaveFileDialog();
    sfd.Filter = "CSV Files (*.csv)|*.csv|All Files (*.*)|*.*";
    sfd.FilterIndex = 1;
    sfd.RestoreDirectory = true;

    // If no File is selected, the program ends.
    if (sfd.ShowDialog() != DialogResult.OK)
    {
        return;
    }
    StreamWriter writer = new StreamWriter(sfd.FileName);

    string line = "";

    foreach (DataColumn col in table.Columns)
    {
        line += col.ColumnName + ",";
    }
    writer.WriteLine(line.TrimEnd(','));

    foreach (DataRow row in table.Rows)
    {
        line = "";
        foreach (string s in row.ItemArray)
        {
            line += s + ",";
        }
        writer.WriteLine(line.TrimEnd(','));
    }
}

同样,程序对数据或文件没有任何问题,它只是不写入文件。

1 个答案:

答案 0 :(得分:7)

您需要关闭该文件并确保其刷新到磁盘

最简单的方法是将其包装在使用陈述中

using (StreamWriter writer = new StreamWriter(sfd.FileName))
{

    //do stuff here
    ...
    ...

} // this closes and flushes the file to disk

一些额外的阅读

StreamWriter.Flush Method ()

  

清除当前编写器的所有缓冲区并导致任何缓冲数据   写入基础流。

FileStream.Flush Method ()

  

清除此流的缓冲区并导致任何缓冲数据   写到文件。

StreamWriter.Close Method ()

  

关闭当前的StreamWriter对象和基础流。   您必须调用Close以确保正确写出所有数据   到底层流。跟随调用Close,进行任何操作   StreamWriter可能会引发异常。如果没有足够的   磁盘空间,调用Close将引发异常。

using Statement

  

提供方便的语法,确保正确使用   IDisposable对象。

<强>〔实施例

using (StreamWriter writer = new StreamWriter("important.txt"))
{
    writer.Write("Word ");
    writer.WriteLine("word 2");
    writer.WriteLine("Line");
}

<强>更新

  

哦,所以它没有&#34;拯救&#34;直到你关闭流?

带有这些参数的StreamWriter开头由FileStream支持,除非已自动刷新或刷新,否则不会保存。当你关闭时会发生这种情况,当你处理时会发生关闭。经验法则,如果它是一次性的,总是使用using陈述