【发布时间】:2014-07-01 13:24:23
【问题描述】:
我有一些代码可以处理一个或多个 DataTable,将行和列数据作为 CSV 文件写入流。每个 DataTable 的内容都保存到一个单独的 CSV 文件中,最后保存到 zip 文件(使用DotNetZip。当只有一个需要处理的 DataTable 时,此代码可以正常工作,但是当有多个 DataTables 时,行和列数据是仅保存到一个 CSV(其他 CSV 为空),并且数据在随机位置被截断。
MemoryStream stream = new MemoryStream();
MemoryStream outputStream = new MemoryStream();
StreamWriter streamWriter = new StreamWriter(stream);
StreamWriter outStreamWriter = new StreamWriter(stream);
CsvConfiguration config = new CsvConfiguration();
config.QuoteAllFields = true;
streamWriter.WriteLine("sep=" + config.Delimiter);
var zip = new ZipFile();
var csv = new CsvWriter(streamWriter, config);
foreach (DataTable dt in dataTables)
{
foreach (DataColumn dc in dt.Columns)
{
csv.WriteField(dc.ColumnName.ToString());
}
csv.NextRecord();
foreach (DataRow dr in dt.Rows)
{
foreach (DataColumn dc in dt.Columns)
{
csv.WriteField(dr[dc].ToString());
}
csv.NextRecord();
}
zip.AddEntry(report.Title.ToString() + dt.GetHashCode() + ".csv", stream);
stream.Position = 0;
}
zip.Save(outputStream);
streamWriter.Flush();
outStreamWriter.Flush();
outputStream.Position = 0;
return outputStream;
我怀疑我对 zip.AddEntry() 的使用可能不是将文件保存到流的正确方法。一如既往地感谢任何帮助。另请注意,我知道我的代码中没有任何 using 语句:我懒得在这个示例中添加它。
【问题讨论】:
标签: c# memorystream