Ich arbeite mit Stapeln von Dateien, die Informationen über das gleiche Objekt zu unterschiedlichen Zeiten enthalten, und die einzige Möglichkeit, sie zu bestellen, ist das Erstellungsdatum. Ich benutzte das:
%Vor%Aber das scheint nicht zu funktionieren. Was mache ich falsch? Gibt es andere, zuverlässigere / einfachere Methoden, um das Datum der Dateierstellung unter Linux zu erhalten?
Die nächste Annäherung an 'creation date' ist das st_ctime
-Member in struct stat
, das aber tatsächlich die letzte Änderung des inode anzeigt. Wenn Sie die Datei erstellen und niemals ihre Größe oder Berechtigungen ändern, funktioniert dies als Erstellungszeit. Ansonsten gibt es keine Aufzeichnung darüber, wann die Datei erstellt wurde, zumindest in Standard-Unix-Systemen.
Sortieren Sie für Ihre Zwecke nach st_mtime
... oder rufen Sie die Dateien mit einem Zeitstempel im Namen auf.
Beachten Sie, dass die Erstellungszeit verfügbar ist, wenn Sie Darwin (Mac OS X) verwenden. Auf der Manpage für stat(2)
:
%Vor%Wenn jedoch das Makro
_DARWIN_FEATURE_64_BIT_INODE
definiert ist, wird die Stat-Struktur nun wie folgt definiert:
Beachten Sie das Feld st_birthtimespec
. Beachten Sie auch, dass alle Zeiten in struct timespec
-Werten sind, also gibt es eine Zeit in der Sekunde ( tv_nsec
ergibt eine Auflösung im Nanosekundenbereich). POSIX 2008 <sys/stat.h>
benötigt die struct timespec
-Zeit für die Standardzeiten ; Darwin folgt dem.
Um das Dateierstellungsdatum in Linux zu erhalten, verwende ich die folgende Methode
%Vor%atime: Zuletzt Datei wurde geöffnet oder ausgeführt
ctime: Zeit, zu der die Inode-Information aktualisiert wurde. ctime wird auch aktualisiert, wenn die Datei geändert wird
mtime: Zuletzt geänderte Zeit
Zeit: Dateierstellungszeit
Die Dateierstellungszeit wird nirgendwo gespeichert. Sie können nur eines der folgenden Elemente abrufen:
%Vor% Ihr Code sollte Ihnen jedoch die letzte Änderungszeit geben. Hinweis: Sie können stat()
anstelle von fstat()
verwenden, ohne die Datei zu öffnen ( stat()
übernimmt den Dateinamen als Parameter).