necesito actualizar eltiempo de creaciónde un archivo falso a 'ahora', eliminándolo y volviéndolo a crear. Curiosamente, ¡parece que el archivo recién creado hereda el tiempo de creación del archivo original!
Déjame demostrar:
> 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
Esto concluye mi demostración. Surgen dos preguntas:
^^^ Lo que dijo.
¿Cómo puedo arreglarlo?
Ok, déjame ampliar esto:
¿Alguien sabe qué mecánica interna del sistema operativo Windows/NTFS está en juego? Parece que se realiza algún almacenamiento en caché de metadatos de archivos y la invalidación de la caché tiene un límite de tiempo.
¿Alguna sugerencia sobre cómo puedo obtener un archivo nuevo con el mismo nombre que el original, con una versión actualizada
ctime
? Cualquier sugerencia es bienvenida, ya sean scripts por lotes, trucos de registro, programáticos o lo que sea.
Respuesta1
Las respuestas:
- El proceso se llama 'Túnel del sistema de archivos' (derivado de la mecánica cuántica) y, hasta donde tengo entendido, fue diseñado originalmente para Win 95. Es necesario que el sistema operativo maneje la situación en la que un programa simplemente guarda y sobrescribe un archivo. . En ese caso, el usuario normalmente espera que la fecha de creación (y el nombre corto del archivo) no cambie, pero sin el túnel, la fecha de creación reflejaría la última hora de guardado. Ver:Algunos recordatorios sobre los tiempos de los archivos de Windows,La historia apócrifa de la tunelización del sistema de archivos
- Hay dos formas de solucionar el problema:
- por modificación inmediata del tiempo de creación después de guardar/crear
- por configuración de registro (para todo el sistema operativo):
La configuración del túnel de archivos está controlada por la clave del Registro de Windows HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem.
Para aumentar el tiempo de caché del túnel, modifique/agregue el valor DWORD MaximumTunnelEntryAgeInSeconds. El tiempo de caché predeterminado es de 15 segundos. Para deshabilitar el túnel, modifique/agregue el valor DWORD MaximumTunnelEntries y configúrelo en 0.
Respuesta2
No uso Windows, pero creo que encontré una solución.
Win32 aparentemente permitemodificando los tiempos de creación de archivos, utilizando elEstablecer hora de archivofunción.
Si no está escribiendo una aplicación con Win32, debería poder usar PowerShell. Basado enrespuesta similar de desbordamiento de pila:
C:\> powershell (ls your-file-name-here).CreationTime = Get-Date
Respuesta3
Utilice atime, no ctime. El tiempo de acceso es efectivamente el tiempo de creación, ya que no se actualiza en el acceso.ya no