lastwritetime меняется при извлечении zip-файла в c #? - PullRequest
4 голосов
/ 15 декабря 2010

Я использую Sharpziplib version 0.86 для распаковки zip-файла. Он работает нормально, но при извлечении файла winzip с помощью кода время Lastwrite изменяется в считанные секунды ...

Использовали это также File.SetLastWriteTime(fullPath, theEntry.DateTime);

Фактический файл Lastwritetime: 4/8/2010 2:29:03PM После архивирования этого файла с помощью winzip и при извлечении этого файла с использованием кода извлеченный файл Lastwritetime изменяется на 4/8/2010 2:29:04PM ... Есть ли какое-либо исправление для этого ???

Ответы [ 2 ]

2 голосов
/ 16 декабря 2010

Я получил этот ответ от Sharpziplib Forum

Hi

Похоже, это ошибка WinZip.Я не замечал этого раньше.

Я сделал этот тест:

1) Используйте WinZip, чтобы добавить файл в zip.В WinZip нажмите Свойства и детали.Просмотрите список сведений и найдите временную метку файла.

2) Используйте SharpZipLib для создания аналогичного zip-файла с тем же входным файлом.Откройте результат в Winzip и посмотрите Свойства> Детали для метки времени файла.

Мой входной файл имеет измененную метку времени (свойства файла) 2010-12-14 15:51:28 и в моем тесте, SharpZipLib правильно сохранил его в zip, а WinZip сохранил его как 2010-12-14 15: 51: 30

Другими словами, WinZip добавил 2 секунды, когда помещал его в zip.После извлечения (либо с помощью WinZip или SharpZip), Modified теперь 15:51:30 вместо оригинального 15: 51: 28.

, удивительно, что такая очевидная ошибка в WinZip могла остаться незамеченной инефиксированный так долго.Если у вас есть платная версия, вы, безусловно, должны исправить ошибку с ними.

Я только что вспомнил кое-что о 2-секундной детализации в старых отметках времени файловой системы 8.3.

Быстрый Google нашел это ...

Цитата "В исходной файловой системе DOS было только 32байты для представления файла в каталоге. Очень ограничительное имя файла 8.3 и ограниченная гранулярность (2 секунды) в дате файла исправляются в файловых системах Win32 (VFAT). "с http://www.xxcopy.com/xxcopy15.htm

Формат Zip допускает только 2-секундную гранулярность в стандартной записи метки времени. Дата и время кодируются в стандартном формате MS-DOS.

Дополнительное поле дополнительных данных NTFS(0x000a) может быть включено, которое может содержать время последнего изменения, время последнего доступа и время создания.WinZip не появляется, чтобы создать его.SharpZip будет использовать его, если он присутствует, но, насколько я вижу, он не создается при использовании FastZip для создания почтового индекса.Это может быть полезным вариантом для добавления в код.Вы можете создать его вручную, если используете ZipFile.

Надеюсь, это поможет, Дэвид

2 голосов
/ 15 декабря 2010

Я думаю, это может быть вызвано именно операционной системой.Я пробовал, что происходит в Explorer.У меня есть текстовый файл с измененной отметкой времени 17:06:45.Я щелкаю правой кнопкой мыши по файлу и выбираю Отправить в |Сжатая (заархивированная) папка.Затем я щелкаю правой кнопкой мыши по новому zip-файлу и выбираю Извлечь все ..., затем Далее, Далее, Готово.Теперь извлеченный текстовый файл имеет метку времени 17: 06: 46.

То же самое происходит, когда я использую 7-Zip или WinRar.Но тогда это происходит только при использовании файла .zip.Если я позволю им создать файл .7Z или .RAR, отметка времени не изменится.

Найдено статья в Википедии о формате zip.Если вы выполните поиск по «секундам», вы обнаружите раздел, описывающий, что файловая система ZIP имитирует файловую систему DOS FAT, которая имеет временное разрешение только две секунды.

...