StreamWriter似乎没有做任何事情?

Ben*_*Ben 1 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(','));
    }
}
Run Code Online (Sandbox Code Playgroud)

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

AAA*_*ddd 7

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

最简单的方法是将其包装在使用状态中

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

    //do stuff here
    ...
    ...

} // this closes and flushes the file to disk
Run Code Online (Sandbox Code Playgroud)

一些额外的阅读

StreamWriter.Flush方法()

清除当前编写器的所有缓冲区,并将所有缓冲的数据写入基础流.

FileStream.Flush方法()

清除此流的缓冲区并使任何缓冲的数据写入该文件.

StreamWriter.Close方法()

关闭当前的StreamWriter对象和基础流.您必须调用Close以确保所有数据都正确写入基础流.在调用Close之后,StreamWriter上的任何操作都可能引发异常.如果磁盘上没有足够的空间,则调用Close将引发异常.

使用Statement

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

〔实施例

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

更新

哦,所以在关闭流之前它不会"保存"?

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