Windows 7-Dateisystem: Verblüfft – Datei löschen und neu erstellen: Erstellungszeit ändert sich nicht! Warum und wie lässt sich das Problem beheben?

Windows 7-Dateisystem: Verblüfft – Datei löschen und neu erstellen: Erstellungszeit ändert sich nicht! Warum und wie lässt sich das Problem beheben?

Ich muss aktualisierenErstellungszeitpunkteiner gefälschten Datei in „jetzt“, indem sie gelöscht und neu erstellt wird. Seltsamerweise sieht die neu erstellte Datei so aus, als ob sie die Erstellungszeit der Originaldatei erbt!

Lassen Sie es mich demonstrieren:

> 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

Damit ist meine Demonstration abgeschlossen. Es stellen sich zwei Fragen:

Was zum Teufel?!

  1. ^^^ Was er gesagt hat.

  2. Wie kann ich es reparieren?

Ok, lassen Sie mich näher darauf eingehen:

  1. Weiß jemand, welche internen Mechanismen des Windows-Betriebssystems/NTFS dabei eine Rolle spielen? Es sieht so aus, als ob einige Dateimetadaten zwischengespeichert werden und die Cache-Ungültigkeitserklärung zeitgebunden ist.

  2. Irgendwelche Vorschläge, wie ich eine brandneue Datei mit demselben Namen wie das Original und einer aktuellen Version erhalten kann ctime? Alle Vorschläge sind willkommen, seien es Batch-Skripte, Registry-Hacks, programmgesteuerte oder was auch immer.

Antwort1

Die Antworten:

  1. Der Vorgang heißt „File System Tunneling“ (abgeleitet aus der Quantenmechanik) und wurde, soweit ich weiß, ursprünglich für Windows 95 entwickelt. Das Betriebssystem muss mit der Situation umgehen können, wenn ein Programm eine Datei einfach speichert und überschreibt. In diesem Fall erwartet der Benutzer normalerweise, dass sich das Erstellungsdatum (und der kurze Dateiname) nicht ändern, aber ohne Tunneling würde das Erstellungsdatum den letzten Speicherzeitpunkt widerspiegeln. Siehe:Einige Hinweise zu den Dateizeiten unter Windows,Die apokryphe Geschichte des Dateisystem-Tunnelings
  2. Es gibt zwei Möglichkeiten, das Problem zu beheben:
  • durch sofortige Änderung des Erstellungszeitpunkts nach dem Speichern/Erstellen
  • durch Registrierungseinstellungen (für das gesamte Betriebssystem):

Die Dateitunneling-Einstellungen werden durch den Windows-Registrierungsschlüssel HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem gesteuert.

Um die Tunnel-Cache-Zeit zu erhöhen, ändern/fügen Sie den DWORD-Wert MaximumTunnelEntryAgeInSeconds hinzu. Die Standard-Cache-Zeit beträgt 15 Sekunden. Um Tunneling zu deaktivieren, ändern/fügen Sie den DWORD-Wert MaximumTunnelEntries hinzu und setzen Sie ihn auf 0.

Antwort2

Ich verwende kein Windows, aber ich glaube, ich habe eine Problemumgehung gefunden.

  1. Win32 erlaubt offenbarÄndern der Dateierstellungszeiten, Verwendung derDateizeit festlegenFunktion.

  2. Wenn Sie keine App mit Win32 schreiben, sollten Sie PowerShell verwenden können. Basierend auf einerähnliche Stackoverflow-Antwort:

    C:\> powershell  (ls your-file-name-here).CreationTime = Get-Date
    

Antwort3

Verwenden Sie atime, nicht ctime. Die Zugriffszeit ist tatsächlich die Erstellungszeit, da sie beim Zugriff nicht aktualisiert wird.mehr

verwandte Informationen