C# 将多个文件添加到存档

C# 将多个文件添加到存档,c#,.net-4.5,dotnetzip,C#,.net 4.5,Dotnetzip,我不知道为什么这行不通——开始让我发疯了 似乎没有其他人有这个问题 我的代码如下所示: Stream stream = new MemoryStream(); try { // output zip using (ZipFile zipFile = new ZipFile()) { zipFile.CompressionLevel = Ionic

我不知道为什么这行不通——开始让我发疯了

似乎没有其他人有这个问题

我的代码如下所示:

        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文件无效

如果有任何建议,我将不胜感激

谢谢

更新

我注意到,如果我用正确的大小初始化流,它就会工作。 有人知道如何在不将归档文件写入磁盘的情况下获取归档文件的大小吗

进一步更新

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

我可以通过将存档保存到磁盘,然后将其读回另一个流来完成我需要的工作


非常蹩脚,我真的不喜欢它,所以如果有人能建议一个更好的方式,我将不胜感激

我从未使用过它,但通过查看示例(一些检查、注释和没有删除相关行),我发现:

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);
    }
}

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


虽然似乎没有人这么说,但唯一的解决办法是将存档保存到磁盘。

奇怪的是,如果我保存到一个文件,它就可以正常工作!保存到流会给我带来问题+谢谢你给我这个线索!你读过图书馆提供的例子吗?查看ZlibStreamExample并向我们显示代码和错误消息,您已经尝试过了。是的,我已经尝试过了。代码在问题中。你想举哪一个例子?保存到流中的代码没有那么多。@bukko我提到的那个:ZlibStreamExample,试试看。如何初始化
变量?我添加了
的声明。我找不到这个例子-你能给出url吗?注意,我使用的是zip库而不是zlib,因为我需要PK兼容的zip32压缩;zlib与zip兼容吗?谢谢