.NET 4.5 ZipFile类未生成一致的文件

.NET 4.5 ZipFile类未生成一致的文件,.net,zip,md5,.net,Zip,Md5,也许我只是不理解Zip文件。。。这是我的。我使用下面粘贴的代码压缩我的java工作区并将其推送到网络驱动器。其目的是,我将有这个运行在PC登录。我关闭了所有java窗口,我运行了两次该工具。根据.NET和我复制到的linux系统,我生成了两个字节长度相同但MD5不同的ZIP 但是,当我手动使用7zip从java目录创建zip文件时,我会分别执行两次,并且文件具有相同的MD5 任何人都可以验证这个问题,或者提供一些关于什么可能导致这个问题的见解吗?据我所知,zip文件应该是可重复的,在算法中没有类

也许我只是不理解Zip文件。。。这是我的。我使用下面粘贴的代码压缩我的java工作区并将其推送到网络驱动器。其目的是,我将有这个运行在PC登录。我关闭了所有java窗口,我运行了两次该工具。根据.NET和我复制到的linux系统,我生成了两个字节长度相同但MD5不同的ZIP

但是,当我手动使用7zip从java目录创建zip文件时,我会分别执行两次,并且文件具有相同的MD5

任何人都可以验证这个问题,或者提供一些关于什么可能导致这个问题的见解吗?据我所知,zip文件应该是可重复的,在算法中没有类似随机种子或任何东西。 这段代码是用VS2012和程序集中链接的System.IO.Compression.FileSystem文件编译的

 Public Sub New(sourceDir As String, baseName As String)
        s = sourceDir
        t = t + baseName + ".zip"
        ZipFile.CreateFromDirectory(s, t, Compression.CompressionLevel.NoCompression, False)
        Dim stream As IO.FileStream = IO.File.OpenRead(t)
        Dim md5 As System.Security.Cryptography.MD5 = System.Security.Cryptography.MD5.Create()
        hash = BitConverter.ToString(md5.ComputeHash(stream))
        md5.Dispose()
        stream.Close()
        Dim file As New System.IO.FileInfo(t)
        fname = baseName + "." + hash + ".zip"
        t = file.DirectoryName + "\" + fname
        file.MoveTo(t)
    End Sub

有点猜测,但是Zip头规范包含一个字段。这很可能是设置为文件创建时间,这在两次运行之间是不同的


使用二进制文件编辑器检查是否存在这种情况非常容易。

测试是否显示该文件有效?ZIP文件格式有一些未使用的字段,如果它们是,我可以想象其中有垃圾,这会影响校验和。谢谢,我会研究一下,奇怪的是,7z在不同时间创建的ZIP不会有这个问题。但这确实是一件值得研究的事情。也许我可以覆盖它,根据windowsYup使用文件夹的最后修改日期,看起来就是这样。我想我必须使用一种不同的归档格式或库来声明datetime字段。谢谢