Неправильная дата создания файлов в Windows при копировании файлов, если файл уже существовал

У меня проблема при копировании файлов (или создании новых файлов) в Windows 7. Если я копирую файл, я ожидаю, что созданная дата будет правильной, но иногда это не так. Обычно это работает, но вот пример того, когда это не работает:

У меня есть две папки на рабочем столе, папка 1 и папка 2. Я создаю новый текстовый файл в папке 1 с именем 852pm (или всякий раз, когда он был создан). Я копирую файл в папку 2. Скопированный файл имеет правильную дату создания. Я удаляю скопированный файл, подожду минуту и ​​скопирую его снова. Дата создания неверна. Дата создания - из удаленного файла.

Сначала я попытался очистить корзину, но это не сработало. И иногда при создании нового файла с тем же именем отображается старая дата создания (и с новой измененной датой).

Почему это происходит? Как я могу заставить новые файлы в этой ситуации показывать правильные даты создания?

2 ответа

Решение

Файловое туннелирование

Цитирование официальной статьи базы знаний Windows NT содержит возможности туннелирования файловой системы:

Это происходит после удаления или переименования и повторного введения новой записи каталога с этой метаинформацией (если происходит создание или переименование, что приводит к повторному появлению файла с таким именем в течение короткого периода времени).

Идея состоит в том, чтобы имитировать поведение программ MS-DOS, когда они используют безопасный метод сохранения. Они копируют измененные данные во временный файл, удаляют оригинал и переименовывают временный в оригинал. Похоже, это будет оригинальный файл после завершения. Windows выполняет туннелирование в файловых системах FAT и NTFS, чтобы гарантировать сохранение длинных / коротких имен файлов, когда 16-разрядные приложения выполняют эту безопасную операцию сохранения.

В статье также объясняется, как увеличить время кэширования или вообще отключить возможности туннелирования.

Отключить туннелирование файлов

  1. Нажмите Win+R, введите regeditи нажмите кнопку ОК.

  2. Перейдите к следующему разделу реестра:

    HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ Control \ FileSystem
  3. Щелкните правой кнопкой мыши пустую область на правой панели и выберите " Создать"> "Значение DWORD (32-разрядное)".

  4. Назовите новое значение MaximumTunnelEntries,
    Убедитесь, что установлено 0: это означает, что никакие туннельные записи не будут созданы.

Дополнительная информация

Название "туннелирование" происходит от квантовой механики (довольно круто):

Разработчик, отвечавший за реализацию туннелирования в Windows 95, увлекся аналогией с квантовой механикой: фрагменты информации о недавно удаленных или недавно переименованных файлах хранятся в структурах данных, называемых "кварками".

Источник: Апокрифическая история туннелирования файловой системы.

дальнейшее чтение

Вы можете обновить время создания с помощью этой команды вручную:

powershell (ls YourFile.txt).CreationTime = Get-Date

... и то же самое в командном файле:

call powershell "(ls YourFile.txt).CreationTime = Get-Date"
Другие вопросы по тегам