ZipOutputStream ZipEntry正在丢失毫秒信息

时间:2015-03-27 16:04:08

标签: c# compression zip zipoutputstream

在C#中使用SharpZipLib,我正在使用:

// ..
ZipEntry entry = new ZipEntry(Path.GetFileName(files[i].fullfilename));
entry.DateTime =files[i].datemodified //has everything including milliseconds
//.. some more code which i'm not writing

zip文件创建得很好,但是当我使用任何第三方解压缩程序解压缩时,我看到该文件在文件的修改日期中丢失了毫秒信息(毫秒信息对我来说非常重要)。 我看到了ZipEntry的代码及其DateTime属性: https://github.com/icsharpcode/SharpZipLib/blob/c49a22d70a77819b1dc88309c91e99565aa9099b/src/Zip/ZipEntry.cs#L695

你会看到在zip文件中写入此条目的日期时间是: https://github.com/icsharpcode/SharpZipLib/blob/c49a22d70a77819b1dc88309c91e99565aa9099b/src/Zip/ZipOutputStream.cs#L344 这是ms dos格式时间的int转换。 有人可以帮忙告诉我如何编写这个,以便最终的压缩文件包含其修改日期时间中的所有内容,该日期时间是我从fileinfo的“LastWriteTime”获得的原始DateTime。

感谢。

2 个答案:

答案 0 :(得分:0)

您可以阅读zip specification,了解如何将Unix额外字段包含在第二个字段中。我不知道定义的额外字段带有毫秒信息,所以你必须创建自己的,并编写自己的拉链和解压缩器来处理它。

答案 1 :(得分:0)

存储毫秒信息的唯一方法(我知道)是使用NTFS额外字段。但是,您需要了解如何根据PKWARE规范编写此字段。并且无法保证第三方解压缩程序会支持它(很可能不支持)。