ZipOutputStream ZipEntry теряет информацию о миллисекундах

используя 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: ://github.com/icsharpcode/SharpZipLib/blob/c49a22d70a77819b1dc88309c91e99565aa9099b/src/Zip/ZipEntry.cs#L695

вы видите, что то, что записывается в zip-файле в качестве даты и времени для этой записи: ="nofollow">https://github.com/icsharpcode/SharpZipLib/blob/c49a22d70a77819b1dc88309c91e99565aa9099b/src/Zip/ZipOutputStream.cs#L344, который представляет собой целочисленное приведение времени в формате MS DOS. Может кто-нибудь, пожалуйста, помогите мне, скажите, как мне написать это, чтобы окончательный заархивированный файл содержал все в своем измененном дате и времени, которое было в моем исходном DateTime, которое я получил из «LastWriteTime» файла fileinfo.

Спасибо.


person user734028    schedule 27.03.2015    source источник
comment
Я только что переключился на dotnetzip.codeplex.com, и это, кажется, намного лучше сохраняет дату и время, я надеюсь других недостатков нет. кажется, есть небольшая проблема с его событием AddProgress, но, возможно, это ошибка в моем коде.   -  person user734028    schedule 28.03.2015


Ответы (2)


Вы можете прочитать спецификацию zip, чтобы узнать, как включить дополнительное поле Unix со временем вплоть до второго. Я не знаю определенного дополнительного поля, которое содержит информацию о миллисекундах, поэтому вам придется создать свое собственное и написать свой собственный застежка-молния и распаковщик для его обработки.

person Mark Adler    schedule 27.03.2015

Единственный способ (известный мне) для хранения информации о миллисекундах - это использование дополнительного поля NTFS. Однако вам нужно научиться заполнять это поле в соответствии со спецификацией PKWARE. И нет гарантии, что сторонний декомпрессор его поддержит (скорее всего, не поддержит).

person Nickolay Olshevsky    schedule 27.03.2015
comment
Вы бы порекомендовали какую-либо другую библиотеку архивирования, которая может это сделать? Вы использовали обертки 7zip .net, которые могут это сделать? - person user734028; 27.03.2015
comment
Возможно, вам было бы проще хранить времена файлов в дополнительном файле в архиве. - person Nickolay Olshevsky; 28.03.2015