Проверь это:
Я проверил это на Windows XP SP3 и Windows Vista SP2 x64. Мне трудно поверить, что это ошибка. Это действительно ошибка ОС? Если нет, то почему такое поведение? Это доставляет мне неудобства, поскольку я использую дату / время создания файла, чтобы отслеживать циклы резервного копирования в разрабатываемом нами пользовательском приложении.
Спасибо.
Похоже, это задокументированная функция под названием File System Tunneling. Видеть http://support.microsoft.com/kb/172190 для получения подробной информации об этом и о том, как отключить его в настройках реестра.
Я не верю, что это ошибка, я думаю, что это сделано специально. Я сам столкнулся с этим несколько месяцев назад.
Рассмотрим приложение, которое создает временную рабочую копию только что открытого файла. Пока вы работаете, ваши изменения записываются во временный файл. Когда вы закончите и выберите сохранение файла, приложение удалит оригинал и переименует или скопирует временный файл с исходным именем файла. Это не очень распространено, но это не редкость (многие старые и простые приложения работают таким образом ... текстовые редакторы и тому подобное).
В приведенном выше случае каждый раз, когда вы сохраняете файл, дата его создания всегда будет соответствовать дате последнего изменения!
Я не знаю, что за хлам творится за кулисами, возможно, кто-нибудь, обладающий некоторым пониманием, предоставит более подробную информацию. Кстати, некоторые файловые системы вообще не хранят даты создания, а только даты изменения и доступа (например, ext2).
Обновление: я нашел следующее от авторов xxcopy на http://www.xxcopy.com/xxcopy15.htm , который может относиться к тому, что вы делаете:
Поскольку использование даты создания файла вызывает серьезные проблемы, мы обычно не рекомендуем использовать эту дату.
Проблемы с датой создания файла (Дата создания файла),
Проблемы с датой создания файла можно проследить до несогласованности в различных утилитах управления файлами Microsoft. Кажется, что цель трех разных
Изменения в значениях даты файла никогда не были четко определены разработчиком функции. Мы, как разработчики программного обеспечения, не встречали официальных документов по этому поводу.
Я бы предположил, что Windows ленилась и, увидев, что все остальное в новом файле идентично старому, просто повторно использует запись в таблице файловой системы, которая ранее была помечена для удаления.
Такое поведение действительно задокументировано Вот.
Метки времени обновляются в разное время и по разным причинам. Единственная гарантия, связанная с меткой времени файла, заключается в том, что время файла правильно отражается, когда дескриптор, который вносит изменение, закрыт.
(Мой акцент)
Изменить, чтобы добавить: я думаю, вы захотите использовать что-то вроде SetFileTime в вашем приложении после создания файла.
Я нашел это с помощью Win32 DeleteFile в Windows 7 SP1.
Пробовал несколько уловок, чтобы использовать правильную дату создания, но без радости. Если вы подождете 2-3 минуты после удаления файла, а затем создадите новый, дата будет правильной. Вероятно, нужна процедура win32 «очистить все файлы».
Это могло вызвать неприятные ошибки, на мой взгляд довольно сомнительную вещь, неопрятный дизайн. Файл удален, пропал, такого "двоения" быть не должно. Если вы беспокоитесь, предложите использовать win32 SetFileTime
.