在内存中压缩多个文件的例程会生成损坏的zip文件

时间:2015-08-19 20:06:41

标签: .net zip

以下例程来自Web API中的文件服务类。例程的目的是接收文件路径列表并将zip文件作为字节数组返回。 (调用此文件的例程将处理将文件传递给用户。)此例程使用ZipArchive中的System.IO.Compression类。

此例程生成的文件已损坏。返回值的大小始终为1024字节。

此代码几乎与我在MSDN和Stack Overflow上找到的示例相同。什么是不正确的?

public byte[] RetrieveMultipleFilesAsZip(IEnumerable<string> relativePaths)
{
    using (var memoryStream = new MemoryStream())
    {
        using (var archive = new ZipArchive(memoryStream, ZipArchiveMode.Create, true))
        {
            foreach (var path in relativePaths)
            {
                try
                {
                    // ActualPath(): Get the actual path where the file actually lives.
                    var actualPath = ActualPath(path);
                    var filename = Path.GetFileName(actualPath);
                    if (filename == null) continue;

                    var archiveEntry = archive.CreateEntry(filename);
                    using (var writer = new StreamWriter(archiveEntry.Open()))
                    {
                        // RetrieveFile(): A routine in this class that gets the contents of each file.
                        writer.Write(RetrieveFile(path));
                    }
                }
                catch (Exception ex)
                {
                    // ignore this
                }
            }

        }

        memoryStream.Seek(0, SeekOrigin.Begin);
        return memoryStream.GetBuffer();
    }
}

1 个答案:

答案 0 :(得分:0)

XElement^ XMLHelper::QElement(String^ NodeName, String^ Nodevalue) { char NodeSetting[8] = "Setting";
XAttribute^ NewAttribute = gcnew XAttribute(gcnew XName(),Nodevalue)); XElement^ Built = gcnew XElement(NodeName, NewAttribute); return Built; }
更改为StreamWriter,并设置BinaryWriter的{​​{1}}参数。