【发布时间】:2015-12-15 14:27:37
【问题描述】:
在 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 文件的压缩大小。
【问题讨论】:
-
你确定它不是在你
CloseEntry之后自动填充的吗? -
我更正了最后一句话。
-
without putting the files- 不,那是不可能的。所有压缩算法都是通过减少数据中的冗余来工作的,并且无法(无法)提前知道可以达到什么程度。
标签: c# sharpziplib