Sistema de archivos de Windows 7: Asombrado - Eliminar y volver a crear el archivo: ¡el tiempo de creación no cambia! ¿Por qué y cómo solucionarlo?

Sistema de archivos de Windows 7: Asombrado - Eliminar y volver a crear el archivo: ¡el tiempo de creación no cambia! ¿Por qué y cómo solucionarlo?

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:

¡¿Qué carajo?!

  1. ^^^ Lo que dijo.

  2. ¿Cómo puedo arreglarlo?

Ok, déjame ampliar esto:

  1. ¿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.

  2. ¿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:

  1. 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
  2. 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.

  1. Win32 aparentemente permitemodificando los tiempos de creación de archivos, utilizando elEstablecer hora de archivofunción.

  2. 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

información relacionada