Sistema de arquivos do Windows 7: Flabbergasted - Exclua e recrie o arquivo: o horário de criação não muda! Por que e como consertar?

3

Eu preciso atualizar o tempo de criação de um arquivo falso para 'now', excluindo-o e recriando-o. Estranhamente, o arquivo recém-criado parece herdar o tempo de criação do arquivo original!

Deixe-me demonstrar:

> 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

Isso conclui minha demonstração. Duas questões surgem:

  1. ^^^ O que ele disse.

  2. Como posso corrigir isso?

Ok, deixe-me expandir isso:

  1. Alguém sabe o que é a mecânica interna do sistema operacional Windows / NTFS? Parece que ocorre algum cache de metadados de arquivos e a invalidação de cache é limitada pelo tempo.

  2. Alguma sugestão sobre como posso obter um arquivo novinho em folha com o mesmo nome de um original, com um ctime atualizado? Todas as sugestões são bem-vindas, sejam scripts em lote, hacks de registro, programáticos ou o que você quiser.

por Cristi Diaconescu 27.02.2013 / 13:35

2 respostas

2

Eu não uso o Windows, mas acho que encontrei uma solução alternativa.

  1. O Win32 aparentemente permite que modifique a criação de arquivos vezes , usando o SetFileTime função.

  2. Se você não estiver escrevendo um aplicativo com o Win32, será possível usar o PowerShell. Com base em uma resposta stackoverflow semelhante :

    C:\> powershell  (ls your-file-name-here).CreationTime = Get-Date
    
por 27.02.2013 / 13:59
0

Use atime, não ctime. O tempo de acesso é efetivamente o tempo de criação como não é atualizado no acesso mais

    
por 03.08.2016 / 13:05