我必须列出zip文件中的所有可用信息(FileName,lenght,创建日期,修改日期等)。我需要分析的一些zip文件包含文件夹和zip文件以及其他文件类型。
我想知道如何阅读zip文件中的这些文件夹和内容以及zip文件中的zip条目,而不必解压缩整个事情(如果可能的话)
e.g:
Collection.zip FILE1.TXT FILE2.TXT 报告/ REPORT1.TXT REPORT2.TXT first-backup.zip second-backup.zip
使用尖锐的zip库,我可以通过以下方式读取第一层文件:
foreach (Zip_Library.Zip.ZipEntry entry in new Zip_Library.Zip.ZipFile(fi.FullName))
{
printObjectProps(entry);
}
printObjectProps看起来像这样:
private static void printObjectProps(Object obj)
{
Console.WriteLine("--------------------------------------------");
Console.WriteLine("ObjectType:" + obj.GetType().ToString());
Console.WriteLine("--------------------------------------------");
foreach (PropertyInfo propInfo in obj.GetType().GetProperties())
{
Console.WriteLine("PropertyName:" + propInfo.Name);
Console.WriteLine("PropertyType:" + propInfo.PropertyType);
Console.WriteLine("PropertyValue:" + propInfo.GetValue(obj, null));
Console.WriteLine();
}
Console.WriteLine("--------------------------------------------");
}
在我遇到更多麻烦之前,我应该考虑哪些想法?
答案 0 :(得分:1)
DotNetZip会为您提供您想要的东西:
http://dotnetzip.codeplex.com/
使用既简单又简单。列出zipfile目录:
using (ZipFile zip = ZipFile.Read(ExistingZipFile))
{
foreach (ZipEntry e in zip)
{
if (header)
{
System.Console.WriteLine("Zipfile: {0}", zip.Name);
if ((zip.Comment != null) && (zip.Comment != ""))
System.Console.WriteLine("Comment: {0}", zip.Comment);
System.Console.WriteLine("\n{1,-22} {2,8} {3,5} {4,8} {5,3} {0}", "Filename", "Modified", "Size", "Ratio", "Packed", "pw?");
System.Console.WriteLine(new System.String('-', 72));
header = false;
}
System.Console.WriteLine("{1,-22} {2,8} {3,5:F0}% {4,8} {5,3} {0}", e.FileName, e.LastModified.ToString("yyyy-MM-dd HH:mm:ss"), e.UncompressedSize, e.CompressionRatio, e.CompressedSize, (e.UsesEncryption) ? "Y" : "N");
}
}
没有任何东西可以解压缩。它只是寻找文件的末尾,然后向后寻找目录/清单,然后读取它。
如果您发现一个条目本身就是一个zip文件,并且您想要探索它,那么很容易将其作为临时文件提取并递归以进行探索,但如果我没记错,您可以
编辑注: DotNetZip曾经住在Codeplex。 Codeplex已关闭。旧档案仍然[可在Codeplex] [1]获得。看起来代码已迁移到Github: