3

Мне нужно обновить время создания фиктивного файла до «сейчас», удалив его и воссоздав заново. Как ни странно, вновь созданный файл выглядит так, как будто он наследует время создания исходного файла!

Позвольте мне продемонстрировать:

> touch a.txt       //create a new file
> dir /T:C          //creation time
02/27/2013  02:04 PM                 0 a.txt

> dir /T:W          //modification time
02/27/2013  02:04 PM                 0 a.txt

//wait a bit...
> touch a.txt       //update modified-time
> dir /T:C
02/27/2013  02:04 PM                 0 a.txt

> dir /T:W          //mod-time changed, as expected
02/27/2013  02:05 PM                 0 a.txt

> del a.txt
> touch a.txt       //recreate file
> dir /T:C          //same original ctime !!
02/27/2013  02:04 PM                 0 a.txt

> dir /T:W          //the actual time the 2nd file was created
02/27/2013  02:06 PM                 0 a.txt

> del a.txt
> touch b.txt       //ok, create a file with a different name
> dir /T:C          //ctime as expected
02/27/2013  02:07 PM                 0 b.txt

> mv b.txt a.txt
> dir /T:C          //again, ctime of original file!
02/27/2013  02:04 PM                 0 a.txt

> del a.txt
> touch c.txt       //create a file with a different name, again
> dir /T:C          //ctime as expected
02/27/2013  02:08 PM                 0 c.txt

> cp c.txt a.txt    //this time copy it...
> dir /T:C          //ctime of a.txt is that of original file!
02/27/2013  02:04 PM                 0 a.txt
02/27/2013  02:08 PM                 0 c.txt

//wait longer...

> del *
> touch d.txt
> dir /T:C
02/27/2013  02:22 PM                 0 d.txt

> cp d.txt a.txt
> dir /T:C          //lo and behold, the ctime has changed.
02/27/2013  02:22 PM                 0 a.txt
02/27/2013  02:22 PM                 0 d.txt

На этом моя демонстрация заканчивается. Возникают два вопроса:

WTF ?!

  1. ^^^ Что он сказал.

  2. Как я могу это исправить?

Хорошо, позвольте мне остановиться на них:

  1. Кто-нибудь знает, какая внутренняя механика ОС Windows / NTFS играет? Похоже, что происходит кэширование некоторых метаданных файла, и аннулирование кэша ограничено по времени.

  2. Любые предложения о том, как я могу получить совершенно новый файл с тем же именем, что и оригинал, с обновленным ctime? Приветствуются любые предложения, будь то пакетные скрипты, взломы реестра, программные или что-нибудь еще.

2 ответа2

2

Я не использую Windows, но я думаю, что нашел обходной путь.

  1. Win32, очевидно, позволяет изменять время создания файла, используя функцию SetFileTime .

  2. Если вы не пишете приложение для Win32, вы сможете использовать PowerShell. Основанный на подобном ответе stackoverflow:

    C:\> powershell  (ls your-file-name-here).CreationTime = Get-Date
    
0

Используйте atime, а не ctime. Время доступа эффективно время создания , поскольку он не обновляется доступ больше

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .