我有一个程序读取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)
同样,程序对数据或文件没有问题,它只是不写入文件.
您需要关闭该文件并确保它刷新到磁盘
最简单的方法是将其包装在使用状态中
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对象和基础流.您必须调用Close以确保所有数据都正确写入基础流.在调用Close之后,StreamWriter上的任何操作都可能引发异常.如果磁盘上没有足够的空间,则调用Close将引发异常.
提供方便的语法,确保正确使用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声明
| 归档时间: |
|
| 查看次数: |
37 次 |
| 最近记录: |