在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文件的压缩大小而不放置文件并实际创建它。
答案 0 :(得分:0)
最简单的方法是使用ZipOutputStream创建一个虚拟zip文件, 支持底层的MemoryStream。将文件写入 - make 确保你设置相同的压缩因子 - 并关闭 ZipOutputStream,使用ZipFile重新打开它,并扫描条目 获得压缩的大小。
有一个例子here。