C# DataTable到csv转换后缺少行
我正在使用CsvHelper库将一个csv文件转换为另一个具有不同结构的csv文件。首先,我将csv文件的内容读入一个datatable,并显示在DataGridView上,所有内容都能正常工作 将DataTable的内容导出到新的csv文件时出现问题。由于某些原因,DataTable末尾的某些行没有导出。我认为这与StreamWriter类有关,但我找不到原因 我使用夏普开发C# DataTable到csv转换后缺少行,c#,datagridview,datatable,export,export-to-csv,C#,Datagridview,Datatable,Export,Export To Csv,我正在使用CsvHelper库将一个csv文件转换为另一个具有不同结构的csv文件。首先,我将csv文件的内容读入一个datatable,并显示在DataGridView上,所有内容都能正常工作 将DataTable的内容导出到新的csv文件时出现问题。由于某些原因,DataTable末尾的某些行没有导出。我认为这与StreamWriter类有关,但我找不到原因 我使用夏普开发 //Read the original CSV file void Button1Click(object sende
//Read the original CSV file
void Button1Click(object sender, EventArgs e)
{
DialogResult result = openFileDialog1.ShowDialog();
if (result == DialogResult.OK) {
StreamReader str = new StreamReader(openFileDialog1.FileName);
CsvReader csvReadFile = new CsvReader(str);
dt = new DataTable();
dt.Columns.Add("Value", typeof(int));
dt.Columns.Add("Time Stamp", typeof(DateTime));
while (csvReadFile.Read()) {
var row = dt.NewRow();
foreach (DataColumn column in dt.Columns) {
row[column.ColumnName] = csvReadFile.GetField(column.DataType, column.ColumnName);
}
dt.Rows.Add(row);
}
dataGridView1.DataSource = dt;
}
}
//Write the new CSV file
void SaveButtonClick(object sender, EventArgs e)
{
DialogResult result = saveFileDialog1.ShowDialog();
if (result == DialogResult.OK) {
StreamWriter stw = new StreamWriter(saveFileDialog1.FileName);
CsvWriter csvWrite = new CsvWriter(stw);
foreach (DataRow row in dt.Rows) {
for (var i = 0; i < dt.Columns.Count; i++) {
csvWrite.WriteField(row[i]);
}
csvWrite.NextRecord();
}
}
//读取原始CSV文件
无效按钮1单击(对象发送者,事件参数e)
{
DialogResult=openFileDialog1.ShowDialog();
if(result==DialogResult.OK){
StreamReader str=新的StreamReader(openFileDialog1.FileName);
CsvReader csvReadFile=新CsvReader(str);
dt=新数据表();
添加(“值”,类型(int));
添加(“时间戳”,类型(日期时间));
while(csvReadFile.Read()){
var row=dt.NewRow();
foreach(dt.Columns中的DataColumn列){
行[column.ColumnName]=csvReadFile.GetField(column.DataType,column.ColumnName);
}
dt.行。添加(行);
}
dataGridView1.DataSource=dt;
}
}
//写入新的CSV文件
void savebutton单击(对象发送方,事件参数e)
{
DialogResult=saveFileDialog1.ShowDialog();
if(result==DialogResult.OK){
StreamWriter stw=新的StreamWriter(saveFileDialog1.FileName);
CsvWriter csvWrite=新CsvWriter(stw);
foreach(数据行中的数据行){
对于(var i=0;i
难道你不能只做csvWrite.WriteRecords(dt.Rows);
吗?如果你用块将writer放入中,它将Dispose()
这将Flush()
缓冲区。在方法退出之前,这可能没有足够的时间发生。您应该小心处理实现IDisposable
的任何东西,而不仅仅是StreamWriter
。您在哪里关闭stw
?@Crowcoder它通过使用“using”块工作。Thanks@JohnG我不是,这是我的错。