如何在不实际压缩文件的情况下获取压缩文件的大小[SharpZipLib]

时间:2015-12-15 14:27:38

标签: c# sharpziplib

在SharpZipLib中,我们使用ZipEntry:

            var fi = new FileInfo(file);
            var ze = new Sharp.Zip.ZipEntry(fi.Name);
            ze.DateTime = fi.LastAccessTime;
            ze.Size = fi.Length;
            stream.PutNextEntry(ze);

            var buffer = new byte[4096];
            var byteCount = 0;

            using (FileStream inputStream = File.OpenRead(fi.FullName))
            {
                byteCount = inputStream.Read(buffer, 0, buffer.Length);
                while (byteCount > 0)
                {
                    stream.Write(buffer, 0, byteCount);
                    byteCount = inputStream.Read(buffer, 0, buffer.Length);
                }
                inputStream.Close();
            }
            stream.CloseEntry();

有一个ze.CompressedSize属性,但它是-1并且仅在创建zip文件的CloseEntry()之后填充。

有没有办法找出zip文件的压缩大小而不放置文件并实际创建它。

1 个答案:

答案 0 :(得分:0)

  

最简单的方法是使用ZipOutputStream创建一个虚拟zip文件,   支持底层的MemoryStream。将文件写入 - make   确保你设置相同的压缩因子 - 并关闭   ZipOutputStream,使用ZipFile重新打开它,并扫描条目   获得压缩的大小。

有一个例子here