Necesito actualizar el tiempo de creación de un archivo falso a 'ahora', eliminándolo y volviéndolo a crear . ¡Extrañamente, parece que el archivo recién creado hereda el tiempo de creación del archivo original!
Déjame demostrarte:
> 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 expandirme en estos:
¿Alguien sabe qué mecanismos internos del sistema operativo Windows / NTFS están en juego? Parece que tiene lugar el almacenamiento en caché de metadatos de un archivo, y la invalidación de la memoria caché está sujeta al tiempo.
¿Alguna sugerencia sobre cómo puedo obtener un archivo nuevo con el mismo nombre que el original y actualizado
ctime
? Cualquier sugerencia es bienvenida, ya sean scripts por lotes, hacks de registro, programáticos o lo que sea que tenga.
fuente
Respuestas:
No uso Windows, pero creo que he encontrado una solución.
Win32 aparentemente permite modificar los tiempos de creación de archivos , utilizando la función SetFileTime .
Si no está escribiendo una aplicación con Win32, debería poder usar PowerShell. Basado en una respuesta similar de stackoverflow :
fuente
Use atime, no ctime. El tiempo de acceso es efectivamente el momento de la creación, ya que no se actualiza en el acceso más
fuente