preciso atualizar ohora de criaçãode um arquivo falso para 'agora', excluindo-o e recriando-o. Estranhamente, o arquivo recém-criado parece herdar a hora 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. Surgem duas questões:
^^^ O que ele disse.
Como posso consertar isso?
Ok, deixe-me expandir isso:
Alguém sabe qual mecânica interna do sistema operacional Windows/NTFS está em jogo? Parece que ocorre algum cache de metadados de arquivo e a invalidação do cache tem um limite de tempo.
Alguma sugestão sobre como posso obter um arquivo novo com o mesmo nome do original, com um arquivo atualizado
ctime
? Qualquer sugestão é bem-vinda, sejam eles scripts em lote, hacks de registro, programáticos ou o que você quiser.
Responder1
As respostas:
- O processo é chamado de 'File System Tunneling' (derivado da mecânica quântica) e, pelo que entendi, foi originalmente projetado para win 95. É necessário que o sistema operacional lide com a situação quando um programa apenas salva e sobrescreve um arquivo . Nesse caso, o usuário geralmente espera que a data de criação (e o nome curto do arquivo) não mude, mas sem o tunelamento, a data de criação refletiria o último horário de salvamento. Ver:Alguns lembretes sobre os tempos dos arquivos do Windows,A história apócrifa do tunelamento do sistema de arquivos
- Existem duas maneiras de resolver o problema:
- por modificação imediata do tempo de criação após salvar/criar
- pelas configurações do registro (para todo o sistema operacional):
As configurações de tunelamento de arquivos são controladas pela chave do Registro do Windows HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem.
Para aumentar o tempo de cache de tunelamento, modifique/adicione o valor DWORD MaximumTunnelEntryAgeInSeconds. O tempo de cache padrão é de 15 segundos. Para desabilitar o tunelamento, modifique/adicione o valor DWORD MaximumTunnelEntries e defina-o como 0.
Responder2
Não uso o Windows, mas acho que encontrei uma solução alternativa.
Win32 aparentemente permitemodificando tempos de criação de arquivos, usando oDefinirFileTimefunção.
Se você não estiver escrevendo um aplicativo com Win32, poderá usar o PowerShell. Baseado em umresposta stackoverflow semelhante:
C:\> powershell (ls your-file-name-here).CreationTime = Get-Date
Responder3
Use atime, não ctime. O tempo de acesso é efetivamente o tempo de criação, pois não é atualizado no acessonão mais