0

我不知道为什么这不起作用 - 开始让我发疯!

其他人似乎没有这个问题

我的代码看起来像这样:

        Stream stream = new MemoryStream();
        try
        {
            // output zip
            using (ZipFile zipFile = new ZipFile())
            {
                zipFile.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
                ForEach(DataFile file In DataFiles)
                {
                    String sourcePath = dataFile.Path;
                    String archiveName = dataFile.RealName;
                    //byte[] fileContents = File.ReadAllBytes(sourcePath);
                    //zipFile.AddEntry(archiveName, fileContents);
                    zipFile.AddFile(sourcePath, archiveName);
                    //e.FileName = archiveName;
                }

                zipFile.AddEntry("README.TXT", readmeMessage);
                zipFile.Save(stream);
            }
        }
        catch (Exception ex)
        {
            throw;
        }

所有文件路径均有效。

如果我注释掉其余部分,添加自述文件可以正常工作。但是添加其他文件会导致 zip 文件无效。

我将不胜感激任何建议!

谢谢

更新

我注意到,如果我用完全正确的大小初始化流,它就可以工作。有谁知道如何在不将其写入磁盘的情况下获取存档的大小?

进一步更新

我现在添加了一个解决方法。

我可以通过将存档保存到磁盘然后将其读回另一个流来做我需要做的事情

非常蹩脚,我真的不喜欢它,所以如果有人能提出更好的方法,我将不胜感激!

4

2 回答 2

1

我从未使用过它,但查看DotNetZip 库的示例(一些检查、评论和没有删除相关行)我发现了这个:

public static void Main(String[] args)
{
    ... some input checking ...

    string ZipFileToCreate = args[0];
    string DirectoryToZip = args[1];
    try
    {
        using (ZipFile zip = new ZipFile())
        {
            // note: this does not recurse directories! 
            String[] filenames = System.IO.Directory.GetFiles(DirectoryToZip);
            foreach (String filename in filenames)
            {
                Console.WriteLine("Adding {0}...", filename);
                ZipEntry e = zip.AddFile(filename);
                e.Comment = "Added by Cheeso's CreateZip utility.";
            }

            zip.Save(ZipFileToCreate);
        }
    }
    catch (System.Exception ex1)
    {
        System.Console.Error.WriteLine("exception: " + ex1);
    }
}
于 2013-08-17T22:38:50.553 回答
0

似乎一旦 zip 存档达到一定大小(我还没有进行足够的测试来确定实际限制),它就无法可靠地保存到流中。

尽管似乎没有人这么说,但解决此问题的唯一方法是将存档保存到磁盘。

于 2013-09-12T09:32:17.977 回答