Вопрос или проблема
Дата обновляется при копировании файла с старой датой на USB-накопитель, но дата сохраняется при копировании файла на тот же диск?
Итак, вы видите, что в этом каталоге C:\zet
два файла.
Один с датой 1970 года, это файл (IMG_1970...jpg
). (Почему дата такая старая, я не знаю, потому что файл был создан в 2016 году, но тем не менее. Обратите внимание, что год в имени файла совпадает с датой).
Другой файл – это видео 2022 года, которое, как мы увидим, хорошо копируется на USB-накопитель.
C:\>dir c:\zet
Объем на диске C не имеет метки.
Серийный номер тома 4645-5DCE
Каталог c:\zet
2024-12-14 23:51 <DIR> .
2024-12-14 23:51 <DIR> ..
1970-01-02 06:16 2,222,947 IMG_19700102_061650.jpg
2022-06-15 06:15 3,769,884 VID_20220615_071520306.mp4
2 File(s) 5,992,831 bytes
2 Dir(s) 818,724,679,680 bytes free
Вот каталог H:\zet
на моем USB-накопителе. Как вы видите, он в настоящее время пуст. Готов, чтобы я продемонстрировал проблему.
C:\>dir h:\zet
Объем на диске H - Expansion
Серийный номер тома 0085-95C7
Каталог h:\zet
2024-12-14 23:50 <DIR> .
2024-12-14 23:50 <DIR> ..
0 File(s) 0 bytes
2 Dir(s) 3,198,971,805,696 bytes free
Я копирую видеофайл на USB-накопитель и показываю файл, и вы видите, что дата сохранена, она была 2022 года, и этот год сохранен в дате.
C:\>copy c:\zet\VID_20220615_071520306.mp4 h:\zet
1 file(s) copied.
C:\>dir h:\zet
Объем на диске H - Expansion
Серийный номер тома 0085-95C7
Каталог h:\zet
2024-12-14 23:50 <DIR> .
2024-12-14 23:50 <DIR> ..
2022-06-15 06:15 3,769,884 VID_20220615_071520306.mp4
1 File(s) 3,769,884 bytes
2 Dir(s) 3,198,967,873,536 bytes free
Но посмотрите, что происходит, когда я копирую файл с отметкой 1970 года на USB-диск.
C:\>copy c:\zet\IMG_19700102_061650.jpg h:\zet
1 file(s) copied.
C:\>dir h:\zet
Объем на диске H - Expansion
Серийный номер тома 0085-95C7
Каталог h:\zet
2024-12-14 23:50 <DIR> .
2024-12-14 23:50 <DIR> ..
2022-06-15 06:15 3,769,884 VID_20220615_071520306.mp4
2024-12-14 23:51 2,222,947 IMG_19700102_061650.jpg
2 File(s) 5,992,831 bytes
2 Dir(s) 3,198,965,514,240 bytes free
Смотрите выше, что файл, когда был скопирован на H:
, получает обновленную дату до текущей даты, текущего года 2024. Год 1970 не сохранился, дата просто была обновлена до текущей даты/времени!
Обратите внимание, что если я скопирую этот файл со старой датой в другое место на C:
, на тот же диск.
Тогда дата сохраняется.
C:\>md zet2
C:\>copy c:\zet\IMG_19700102_061650.jpg c:\zet2
1 file(s) copied.
C:\>dir c:\zet2
Объем на диске C не имеет метки.
Серийный номер тома 4645-5DCE
Каталог c:\zet2
2024-12-14 23:53 <DIR> .
2024-12-14 23:53 <DIR> ..
1970-01-02 06:16 2,222,947 IMG_19700102_061650.jpg
1 File(s) 2,222,947 bytes
2 Dir(s) 818,721,378,304 bytes free
C:\>cd zet
C:\zet>dir
Объем на диске C не имеет метки.
Серийный номер тома 4645-5DCE
Каталог C:\zet
2024-12-14 23:51 <DIR> .
2024-12-14 23:51 <DIR> ..
1970-01-02 06:16 2,222,947 IMG_19700102_061650.jpg
2022-06-15 06:15 3,769,884 VID_20220615_071520306.mp4
2 File(s) 5,992,831 bytes
2 Dir(s) 818,720,567,296 bytes free
Вы копируете файл в файловую систему FAT32, которая имеет очень ограниченный диапазон и разрешение для отметок времени по сравнению с NTFS.
FAT хранит каждое поле даты/времени (год, месяц, день и т.д.) отдельно и выделяет 7 бит для года, причем 0
означает 1980 год, а 127
означает 2107 год, следовательно 1970 год выходит за пределы возможного диапазона.
Ответ или решение
Когда вы копируете файлы с различными временными метками, поведение системы может зависеть от типа файловой системы, на которую вы копируете данные. В данном случае вы наблюдаете, что при копировании файла с меткой времени 1970 года на USB-накопитель, работающий на FAT32, временная метка обновляется до текущей даты, в то время как при копировании на тот же диск с меткой времени 2016 года, она сохраняется.
Влияние файловой системы на временные метки
-
Тип файловой системы:
Вы используете файловую систему FAT32 для вашего USB-накопителя. FAT32 имеет ограничения по сравнению с NTFS (по умолчанию на большинстве систем Windows). Она использует 7 бит для представления года, а это значит, что диапазон допустимых лет находится в пределах с 1980 по 2107. Таким образом, любой файл с датой, ранее 1980 года, недопустим и приведет к обновлению этой метки на текущую. -
Обработка временных меток:
При копировании файла с меткой времени 1970 года (которая не попадает в допустимый диапазон FAT32), система пытается обработать эту дату, но не может. Поскольку файл не может сохранить свою оригинальную временную метку, Windows присваивает текущую дату и время. -
Копирование между одинаковыми файловыми системами:
При копировании файла с 1970 годом на тот же диск C:, все остается неизменным, потому что NTFS позволяет сохранение временных меток для файлов, и система может обрабатывать их соответственно. Это является результатом более продвинутого способа управления метками времени, который поддерживает расширенные значения и позволяет сохранять оригинальные временные метки без изменений.
Резюме
Таким образом, различия в поведении при копировании файлов с разных временных меток на разные файлы обусловлены:
- Ограничениями файловой системы FAT32: Из-за 7-битного представления года, датам до 1980 года просто не хватает диапазона.
- Управлением временными метками: NTFS не накладывает таких ограничений и может сохранять оригинальные метки времени при копировании на том же диске.
Рекомендации
Чтобы избежать подобных проблем в будущем, вы можете рассмотреть возможность использования более современного формата файловой системы для USB-накопителя, такого как NTFS или exFAT, которые поддерживают более широкий диапазон дат и лучше обрабатывают временные метки. Это обеспечит правильное сохранение временных меток независимо от их значений.
Если у вас есть файлы с сильно устаревшими метками времени, могли бы возникнуть и другие проблемы с их обработкой на различных системах, поэтому дальнейшее изучение системы управления файлами и временными метками будет полезным для предотвращения подобных ситуаций.