【发布时间】:2014-01-18 18:50:07
【问题描述】:
也许我只是不理解 Zip 文件......这就是我所拥有的。我正在使用下面粘贴的代码来压缩我的 java 工作区并将其推送到网络驱动器。目的是我将在 PC 登录时运行此程序。我已经关闭了所有的 Java 窗口,我运行了两次该工具。根据 .NET 和我将它们复制到的 linux 系统,我生成了 2 个字节长度相同但 MD5 不同的 zip。
但是,当我手动使用 7zip 从我的 java 目录创建一个 zip 文件时,我会分别执行 2 次,并且这些文件具有相同的 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 文件格式有一些未使用的字段,如果是,我可以想象它们中有垃圾,这会影响校验和。