如何在 C# 中使用 GZipStream 压缩多个文件

Neo*_*Neo 6 c# csv asp.net-mvc gzip filestream

我使用数据表创建了多个 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;
}
Run Code Online (Sandbox Code Playgroud)

现在,List<filestream>我拥有全部 2 个文件数据,想要创建 2 个不同的.csv文件并temp.gz动态创建一个文件,我该如何执行此操作?

ActionResult方法中,我尝试按照以下代码生成 .zip 文件,但它已损坏

return File(CompressStringToFile("temp.gz", filestream), System.Net.Mime.MediaTypeNames.Application.Zip, "temp.gz");
Run Code Online (Sandbox Code Playgroud)

// 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();
}
Run Code Online (Sandbox Code Playgroud)

纠正我生成 .zip 文件。(内含 2 个 .csv 文件)

Sea*_*ean 3

你不能用 来做到这一点GZipStream。您需要一个第三方库。可能最好的一个是SharpZipLib。我过去在项目中使用过它,它非常容易使用。另外,它已经存在了一段时间,所以应该非常稳定并且没有错误。