我有一个读取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(','));
}
}
同样,程序对数据或文件没有任何问题,它只是不写入文件。
答案 0 :(得分:7)
您需要关闭该文件并确保其刷新到磁盘
最简单的方法是将其包装在使用陈述中
using (StreamWriter writer = new StreamWriter(sfd.FileName))
{
//do stuff here
...
...
} // this closes and flushes the file to disk
一些额外的阅读
清除当前编写器的所有缓冲区并导致任何缓冲数据 写入基础流。
清除此流的缓冲区并导致任何缓冲数据 写到文件。
关闭当前的StreamWriter对象和基础流。 您必须调用Close以确保正确写出所有数据 到底层流。跟随调用Close,进行任何操作 StreamWriter可能会引发异常。如果没有足够的 磁盘空间,调用Close将引发异常。
提供方便的语法,确保正确使用 IDisposable对象。
<强>〔实施例强>
using (StreamWriter writer = new StreamWriter("important.txt"))
{
writer.Write("Word ");
writer.WriteLine("word 2");
writer.WriteLine("Line");
}
<强>更新强>
哦,所以它没有&#34;拯救&#34;直到你关闭流?
带有这些参数的StreamWriter
开头由FileStream
支持,除非已自动刷新或刷新,否则不会保存。当你关闭时会发生这种情况,当你处理时会发生关闭。经验法则,如果它是一次性的,总是使用using
陈述