【发布时间】:2014-08-25 15:27:30
【问题描述】:
我使用数据表创建了多个 csv 文件,并希望将所有这些文件压缩到一个 zip 文件中。 我正在动态地做这一切。
我尝试了以下代码
List<string> filestream = GenerateCSVfiles(dataSets);
//Generate CSV files
public List<string> GenerateCSVfiles(List<DataSet> dataSets)
{
List<string> filestream = new List<string>();
StringBuilder result = null;
foreach (DataSet dataSet in dataSets)
{
result = new StringBuilder();
System.Data.DataTable dataTable = dataSet.Tables[0];
foreach (DataColumn colm in dataTable.Columns)
{
result.Append(colm.ColumnName+",");
}
result.Append("\n");
//create csv file
foreach (DataRow row in dataTable.Rows)
{
for (int i = 0; i < dataTable.Columns.Count; i++)
{
result.Append(row[i].ToString());
result.Append(i == dataTable.Columns.Count - 1 ? "\n" : ",");
}
}
filestream.Add(result.ToString());
}
return filestream;
}
现在在 List<filestream> 我有所有 2 个文件数据想要创建 2 个不同的 .csv 文件并动态创建一个 temp.gz 文件我该怎么做?
在 ActionResult 方法上,我尝试使用以下代码生成 .zip 文件,但它已损坏
return File(CompressStringToFile("temp.gz", filestream), System.Net.Mime.MediaTypeNames.Application.Zip, "temp.gz");
//zip文件生成代码
public byte[] CompressStringToFile(string fileName, List<string> filestream)
{
MemoryStream f2 = new MemoryStream();
FileStream fs = new FileStream();
GZipStream gz = new GZipStream(f2, CompressionMode.Compress, false);
foreach (string oStr in filestream)
{
byte[] b = GetBytes(oStr);
gz.Write(b, 0, b.Length);
}
return f2.ToArray();
}
纠正我生成 .zip 文件。 (包含 2 个 .csv 文件)
【问题讨论】:
-
您发布的代码与您的问题完全无关。调用 List
文件流不是一个好主意。您没有文件,您的方法 GenerateCSVfiles 没有!很难弄清楚如何帮助你...... -
@TonyHopkinson 更新了我的完整代码,请检查
-
你提到了
ActionResult。你能确认你正在使用 MVC 吗?如果是这样,您应该将其添加到标签中。您希望在 ActionResult 方法中返回什么。您希望用户下载 zip 文件吗? -
GZipStream 不支持创建包含多个压缩文件的存档。您需要一个支持 .gz 或 .zip 档案的库。周围有很多,最后也通过 ZipFile 类添加到 .NET 4.5 中。
标签: c# asp.net-mvc csv gzip filestream