Erstellungszeit der Datei in Millisekunden


13

Gibt es eine Möglichkeit, die Erstellungszeit einer Datei in Windows mit einer höheren Genauigkeit zu ermitteln? Ich möchte die Erstellungszeit eines mp4-Videos in Millisekunden erhalten. Ist das möglich?


Ich muss fragen, warum Sie diese Genauigkeit benötigen?
Moab

1
Ich zeichne einige Sensordaten zusammen mit einem Video auf einem Android-Gerät auf. Ich habe die Sensorprotokollierung selbst geschrieben und die Systemzeit zusammen mit jedem Sensorwert protokolliert. Für die Aufnahme des Videos verwende ich die Standardkameraaktivität. Nach dem Senden der Daten an einen PC möchte ich sie analysieren. Zum Zusammenführen des Videos mit den Sensordaten muss ich wissen, wann das Video gestartet wurde. Sekunden sind etwas zu grob, daher suche ich nach einer Möglichkeit, die Startzeit des Videos genauer zu bestimmen.
Phil

3
Hinweis: Wenn Sie eine solche Beziehung zwischen zwei Datenströmen benötigen, ist es in der Regel unerlässlich, ein Registrierungssignal in den Stream einzufügen (wie bei den alten Filmklatschen, die der Regisseur als "Aktion" bezeichnet. Das Klatschen war ein visueller Hinweis und Audio Cue, so dass die zwei oder mehr Streams später synchronisiert werden können). In einigen Situationen kann die Zeitverzögerung zwischen dem Erstellen der Datei im Kernel-Modus (und dem Aufzeichnen des Zeitstempels) und dem Aufwecken des Prozesses, um mitzuteilen, dass ein Dateizugriffspunkt zu verwenden ist, höher sein als die Toleranzen, die Sie für Ihre Daten haben.
Cort Ammon - Reinstate Monica

Wenn Sie Ihre Inhalte von Android an einen anderen Ort kopieren, stellen Sie sicher, dass alle Kopierwerkzeuge die Genauigkeit des Zeitstempels beibehalten. Beachten Sie, dass viele Kopierwerkzeuge dafür sorgen, dass die ctimeKopie zum Zeitpunkt des Kopierens erstellt wird.
Peter Cordes

1
Unter Windows würde ich cygwin / mingw verwenden stat, um alle 3 Zeitstempel zu erhalten. Das liegt natürlich daran, dass ich normalerweise GNU / Linux verwende.
Peter Cordes

Antworten:


23

Timestamp-Auflösung

Der Erstellungszeitstempel einer Datei in Windows hängt vom Dateisystem ab:

  • FAT / VFAT hat eine maximale Auflösung von 2s

  • NTFS hat eine maximale Auflösung von 100 ns


WMIC-Lösung

Mit können Sie wmicdas Erstellungsdatum der Datei auf die nächste Mikrosekunde genau ermitteln .

Beispiel:

F:\test>wmic datafile where name="f:\\test\\test.txt" get creationdate | findstr /brc:[0-9]
20150329221650.080654+060

Das Erstellungsdatum 20150329221650.080654+060ist ein Zeitstempel mit folgendem Format:

yyyymmddHHMMSS.xxxxxxsUUU

wo:

  • yyyy Vierstellige Jahreszahl (0000 bis 9999).

  • mm Zweistelliger Monat (01 bis 12).

  • dd Zweistelliger Tag des Monats (01 bis 31).

  • HH Zweistellige Stunde des Tages im 24-Stunden-Format (00 bis 23).

  • MM Zweistellige Minute in der Stunde (00 bis 59).

  • SS Zweistellige Anzahl von Sekunden in der Minute (00 bis 59).

  • xxxxxx Sechsstellige Anzahl von Mikrosekunden in der Sekunde (000000 bis 999999)

  • sPluszeichen ( +) oder Minuszeichen ( -), um einen positiven oder negativen Versatz zur koordinierten Weltzeit (UTC) anzugeben.

  • UUU Dreistelliger Versatz, der die Anzahl der Minuten angibt, in denen die ursprüngliche Zeitzone von UTC abweicht.


stat Lösung

Sie können auch verwendet werden stat(von einem Cygwin oder MinGW - Installation).

Beispiel:

DavidPostill@Hal /f/test
$ stat test.txt | grep Birth
 Birth: 2015-03-29 22:16:50.080654200 +0100

dir Ausgabe zum Vergleich

F:\test>dir /t:c test.txt
 Volume in drive F is Expansion
 Volume Serial Number is 3656-BB63

 Directory of F:\test

29/03/2015  22:16                32 test.txt
               1 File(s)             32 bytes
               0 Dir(s)  1,798,546,849,792 bytes free

Weitere Lektüre


@ NateEldredge Danke, gut gesehen. Antwort korrigiert.
DavidPostill

4
Ein Hinweis zur Vorsicht: Nur weil ein Zeitstempel eine hochfrequente Ziffer wie die 100-Nanosekunden-Ziffer enthält, bedeutet dies nicht, dass die Uhr als zuverlässige Zeitquelle im Bereich von 100 ns verwendet werden kann. Es heißt lediglich, dass es eine Menge von Inhalten gibt, die [hoffentlich] monoton sind und in etwa mit "Echtzeit" korrelieren.
Cort Ammon - Reinstate Monica

1
Siehe msdn CIM_DATETIME : In Ihrer Notation xxxxxxist die sechsstellige Anzahl von Mikrosekunden in der Sekunde (000000 bis 999999) . Mikro- , dh 10^-6. Natürlich steht das erste Triplett für mili- ( 10^-3): abgeschnitten, nicht gerundet. Das zweite extrahierte Triplett stellt an sich nichts dar ... Einige wmiDatums- / Uhrzeitwerte zeigen jedoch immer das zweite Triplett an 000, z. B.wmic OS get LocalDateTime
JosefZ

1
Danke, diese Art von Antworten ist, warum ich Stapelaustausch liebe :)
Phil

1
@MarisB. Ah. Antwort aktualisiert.
DavidPostill


1

Ich habe in Matlab einen Weg gefunden, dies zu erreichen:

Sie können die GetFileTime- Funktion verwenden, die von Jan Simon geschrieben wurde. Wenn Sie keine eigenen mex-Dateien kompilieren möchten, können Sie die kompilierten Dateien auch hier herunterladen .

Es ist nicht so genau wie wmic (nur ms), aber für meinen Zweck ist es geeignet.


-3

Dies hängt vom Dateisystem ab : FAT hat eine Auflösung von 2 Sekunden, NTFS hat theoretisch eine Auflösung von 100 ns, die tatsächliche Auflösung beträgt jedoch 10 ms . Das heißt, Interrupts haben eine höhere Priorität als Festplatten-E / A, und ich bin nicht sicher, ob sich das Schreiben im Cache auf den Zeitstempel auswirkt. Multimedia-Timer sind auf Genauigkeit optimiert und daher die bevorzugte Methode zur Implementierung des Timings.

Sie können ein vorhandenes Tool wie XYplorer verwenden , um hochauflösende Zeitstempel anzuzeigen , oder XYplorer zeigt msSie möchten Ihre eigene Anwendung schreiben. Verwenden Sie die File.GetCreationTime-Methode . es gibt eine DateTime-Struktur mit Millisecond- Eigenschaft zurück.


1
um ... nicht unhöflich zu sein, aber hast du @ DavidPostills Antwort gelesen?
td512

2
"NTFS hat theoretisch eine Auflösung von 100 ns, aber die tatsächliche Auflösung beträgt 10 ms " ist falsch - dieser Link besagt tatsächlich " unter NT FAT hat die Erstellungszeit eine Auflösung von 10 Millisekunden". Das bedeutet nicht, dass NTFS diese Auflösung hat. Sie können meiner Antwort wmicentnehmen, dass auf NTFS eine Auflösung bis zur nächsten Mikrosekunde angezeigt wird .
DavidPostill

Es gibt einen Unterschied zwischen theoretischer und maximaler Auflösung, eine gibt die maximale Auflösung gut an, die andere gibt eher eine durchschnittliche Auflösung an.
Ramhound

1
@DavidPostill Wenn die Uhr die Zeit nur alle 10 ms inkrementiert, hat ein Datum / Uhrzeit-Feld, das 100 ns darstellen kann, nur eine Genauigkeit von 10 ms. Die typischen UtcNow-APIs (im Gegensatz zu Hochleistungszählern, die zum Messen von Zeitunterschieden entwickelt wurden ) erhöhen die Zeit unter Windows alle 0,5 bis 16 ms, sodass diese Antwort durchaus plausibel ist.
CodesInChaos

@CodesInChaos Ja, aber - "Die beste Ressource zum Abrufen der Systemzeit ist die GetSystemTimeAsFileTime-API. Es ist eine Schnellzugriffs-API, die in der Lage ist, ausreichend genaue Werte (100 ns-Einheiten) in ihren Argumenten zu speichern." - Ich habe keinen Zugriff auf den Windows-Quellcode, daher weiß ich nicht, welche Aufrufe unter der Haube beim Bearbeiten von Dateizeitstempeln verwendet werden. Wir wissen nicht, wie hoch die tatsächliche Auflösung ist - das ist nur eine Vermutung.
DavidPostill
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.