Как испортить дату изменения файла

598
Aemerzel

У нас есть приложение, которое работает с файлами. Приложение прерывается всякий раз, когда оно сталкивается с файлом, в котором нет даты изменения / даты создания (поле буквально мигает в проводнике и через get-childitem)

Как я могу создать такой файл в нашей среде, чтобы попробовать несколько решений локально? Я пробовал глупые вещи, как

$Files = ls "C:\Users\Triumvirate\tmp" ForEach ($File in $Files){ $File.LastWriteTime = $null } 

но это не похоже на работу. Google тоже не очень помог, но я был бы благодарен за любые советы в правильном направлении.

2
Не существует файла, в котором нет даты изменения / даты создания. harrymc 6 лет назад 0
Это не совсем так, потому что я видел эти файлы в удаленном сеансе с нашими пользователями, а затем исправил приложение, переместив файлы в другое место (которое наше приложение не трогало). Их измененная дата пуста. Это определенно происходит, например, [здесь] (https://central.owncloud.org/t/date-modified-field-blank-cannot-sync/10927) или [здесь] (https: / /www.techsupportforum.com/forums/f10/date-modified-is-blank-in-windows-explorer-266648.html) Aemerzel 6 лет назад 0
Ваша первая ссылка: * При более внимательном рассмотрении при просмотре свойств файла поле «Дата изменения» для всех недавно синхронизированных файлов на самом деле говорит «31 декабря 1969 года» ... *. Дата изменения может быть мусором, но она есть. harrymc 6 лет назад 0
Черт возьми, ты гений. Дата, измененная в проводнике, будет отображаться пустой после $ Files = ls "C: \ Users \ Triumvirate \ tmp" ForEach ($ File in $ Files) {$ File.LastWriteTime = Get-Date ("31 / 12/1969 ")} Aemerzel 6 лет назад 0
Кажется, ты это уже нашел. Мне удалось изменить дату / время файла, чтобы очистить. Создал код C # и установил дату `01.01.1970 00: 00: 00`. Sandeep 6 лет назад 0
Проблема в том, что на самом деле дата была пустой не только в проводнике, но и когда я запускал ls -s из Powershell, тогда как когда я установил дату на 1970, в проводнике дата пуста (что, как я полагаю, ожидается? Работает на моем домашнем ПК) ) но дата * не * пуста, когда я запускаю ls -s Aemerzel 6 лет назад 0
Где эти файлы создаются? Это внешнее программное обеспечение? Какая ОС и файловая система используются для хранения этих файлов? Не все файловые системы поддерживают все поля. Sandeep 6 лет назад 0
Sandeep, эти файлы, которые я видел на компьютере пользователя, являются картинками, так что это могут быть некоторые exif shenanigans? ОС Windows 10, файловая система NTFS. ls -s не показывает дату, проводник не показывает дату. Aemerzel 6 лет назад 0

2 ответа на вопрос

0
harrymc

Вы, очевидно, размещаете файлы на устройстве, которое возвращает даты мусора, которые не отображаются в проводнике.

Если это служба облачного хранилища и даты важны, вы можете рассмотреть возможность перехода к другой службе, если их служба поддержки не может предоставить исправление.

Даты отображаются не только в проводнике, но и в PowerShell через Get-ChildItem -recurse Aemerzel 6 лет назад 0
В обоих случаях Microsoft может использовать одно и то же программное обеспечение. harrymc 6 лет назад 0
Harrymc, это определенно возможно, однако, когда я вручную создаю файл с LastWriteTime = 31/12/1969, он не отображается в проводнике, но правильно отображается в Get-childitem, что означает, что он не * точно * совпадает. В деле, которое я расследую, фактически изменена пустая дата, которую я хотел исследовать и повторить, чтобы предложить правильное решение, но я не понимаю, как повторить это. У меня есть подозрение, что, учитывая тот факт, что эти файлы представляют собой изображения с камеры, возможно, что происходит искажение exif, которое вызывает его? Aemerzel 6 лет назад 0
Винда не понимает exif. Файловая система, предоставляемая этим устройством или службой, содержит мусор в частях записей, которые Windows видит на этом виртуальном диске. harrymc 6 лет назад 0
0
Aemerzel

Я нашел решение этой неясной проблемы, которую вы можете использовать.

Вот шаги репликации:

  1. Доступ к папке через bash (у меня двойная загрузка, поэтому я сделал это при установке Ubuntu)
  2. touch -d "1/1/1500" filename.extension (Любой год <1600 подойдет, потому что я считаю, что даты Fat64 начинаются с 1601
  3. Просмотр файла в powershell или explorer даст вам пустое «Дата изменения»:

Powershell Explorer

Похожие вопросы