我必须在zip文件

时间:2015-08-14 08:37:19

标签: c# zip dotnetzip

有人可以帮助我解决我的问题。 我必须在zip文件中获取文件的目录,这样我才能计算出它的MD5哈希值(不解压缩)。我正在使用DotNetZip库,但我无法找到问题的解决方案。我会向您展示我尝试过的内容,并希望您尽快提供帮助。 谢谢!

if (ofd.ShowDialog() == DialogResult.OK) 
{
    using (ZipFile zip = ZipFile.Read(ofd.FileName))
    {
        foreach (ZipEntry f in zip)
        {
            GetMD5HashFromFile(ofd.FileName+"\\"+f.FileName);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

问题是你没有提取Zip条目,它仍然存档。这就是它找不到路径的原因。 我建议使用流并计算,不提取。 请注意MD5没有碰撞安全性。

您必须在项目中引用System.IO.Compression.FileSystem.dll。 完整的工作控制台应用程序:

public class Program
{

    static void Main(string[] args)
    {

        var z = ZipFile.OpenRead(@"C:\directory\anyfile.zip");
        foreach (ZipArchiveEntry f in z.Entries)
        {
           var yourhash = GetMD5HashFromFile(f.Open());
        }

    }

    public static string GetMD5HashFromFile(Stream stream)
    {
        using (var md5 = new MD5CryptoServiceProvider())
        {
            var buffer = md5.ComputeHash(stream);
            var sb = new StringBuilder();

            for (int i = 0; i < buffer.Length; i++)
            {
                sb.Append(buffer[i].ToString("x2"));
            }
            return sb.ToString();
        }
    }
相关问题