Неправильная дата создания файла в Windows XP / Vista

7

Проверь это:

  1. Создайте новый файл на вашем компьютере с Windows.
  2. Обратите внимание на дату и время его создания.
  3. Удалить файл.
  4. Подожди немного.
  5. Создайте новый файл в том же каталоге с тем же именем, что и предыдущий.
  6. Дата и время создания нового файла будут такими же, как и у предыдущего!

Я проверил это на Windows XP SP3 и Windows Vista SP2 x64. Мне трудно поверить, что это ошибка. Это действительно ошибка с ОС? Если нет, то почему это поведение? Это трудное время, так как я использую дату / время создания файла, чтобы отслеживать циклы резервного копирования в пользовательском приложении, которое мы разрабатываем.

Благодарю.

CesarGon
источник

Ответы:

8

Похоже, это документированная функция, называемая туннелированием файловой системы. См. Http://support.microsoft.com/kb/172190 для получения подробной информации об этом и о том, как отключить его с помощью параметра реестра.

Крис Ноултон
источник
7

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

Рассмотрим приложение, которое создает временную рабочую копию файла, который вы только что открыли. Во время работы ваши изменения записываются во временный файл. Когда вы закончите и решите сохранить файл, приложение удалит оригинал и переименует или скопирует временный файл в оригинальное имя файла. Это не очень распространено, но это не редкость (многие старые и простые приложения работают таким образом ... текстовые редакторы и тому подобное).

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

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

Обновление: я нашел следующее от авторов xxcopy по адресу http://www.xxcopy.com/xxcopy15.htm , которое может относиться к тому, что вы делаете:

Поскольку использование даты создания файла имеет серьезные проблемы, мы обычно не рекомендуем использовать эту дату

Проблемы с датой создания файла (File-Create date),

Проблемы даты создания файла могут быть связаны с несоответствием в различных утилитах управления файлами Microsoft. Похоже, что цель трех разных
вариантов значений даты файла никогда не была четко определена разработчиком функции. Мы, как разработчики программного обеспечения, не сталкивались с официальными документами на эту тему.

Boden
источник
2

Я предполагаю, что Windows ленива и - увидев, что все остальное в новом файле идентично старому - просто повторно использует запись в таблице файловой системы, которая ранее была помечена для удаления.

Такое поведение на самом деле задокументировано здесь .

Метки времени обновляются в разное время и по разным причинам. Единственная гарантия относительно временной метки файла - это то, что время файла корректно отражается, когда дескриптор, который делает изменение, закрыт.

(Мой акцент)

Изменить, чтобы добавить: я думаю, вы захотите использовать что-то вроде SetFileTime в вашем приложении после создания файла.

Максимус Минимус
источник
Спасибо Использование SetFileTime - хорошее решение, да.
CesarGon
2

Я нашел это с Win32 DeleteFile на Windows 7 SP1.

Попробовал несколько хитростей, чтобы заставить его использовать правильную «созданную» дату, но без радости. Если вы подождете 2-3 минуты после удаления файла, а затем создадите новый, дата будет правильной. Вероятно, нужна процедура очистки всех файлов win32.

Это может привести к неприятным ошибкам, на мой взгляд, довольно сомнительная вещь, неопрятный дизайн. Файл был удален, пропал, не должно быть таких «ореолов». Если вы беспокоитесь, предложите использовать win32 SetFileTime.

скудный
источник