Speicherdatum einer Datei abfragen

Olaf Lehmann

Mitglied
Hallo,
ich Hobbyprogrammierer sitze zur Zeit an einem Statistikprogramm für eine Rennsimulation.
Nun soll sich das Teil die Besten Zeiten, Sektorzeiten usw. merken. Das geht auch alles soweit. Nun möchte ich aber, dass es sich auch das Datum merkt. Das Datum könnte ich rauskriegen, in dem ich das Speicherdatum der Wiederholungsdatei abfrage. Leider hab ich keine Idee wie das geht und finde auch über Suchmaschine und in den C++-Tutorials hier nichts. HaT JEMAND NEN Tipp?

Falls es von belang ist: Ich öffne die Wiederholungsdatei auf die Art:
HTML:
ifstream Quelle;               //Datei .rpy öffnen
Quelle.open(Pfad, ios_base::in | ios_base::binary);

Mit freundlichem Gruß
Olaf
 
Hallo,

in welcher Form willst du dir das Datum merken?
Hier mal ein Beispiel, wie du es rauskriegst:
C++:
#include <iostream>
#include <ctime>
#include <sys/stat.h>

...

struct _stat finfo;

if( _stat("datei.rpy", &finfo) == 0 )
{
    char buf[51];
    strftime(buf, 50, "%d.%m.%Y %H:%M", localtime(&finfo.st_mtime));
    
    std::cout << "Datum: " << buf << std::endl;        
}
Gruß
MCoder
 
Also wenn ich hab in C noch nie von einem Datumsdatentyp gehört.
Deshalb dachte ich mir ich speichere es in einem 2 diminsionalen int-Array.
Code:
dim Array[17][4];
die erste Dimension ist für die Zeiten,Sectorenzeiten, Sectorengeschwindigkeiten müssten 17 Sachen zusammenkommen, wenn ich richtig rechne.
Die zweite Dimension ist dann
[0]...der eigentlcihe Wert (z.B.Zeit)
[1]...Tag
[2]...Monat
[3]...Jahr
Wenn ichs richtig verstehe steckt das Datum ja in Deinem Beispiel in als char-String in buf.
localtime ist doch bestimmt die augenblickliche Zeit. Warum brauch ich die dazu?

Dankeschön schon mal. Ich probier es morgen aus
Gruß
Olaf
 
Ich hab's eigentlich nur zu Demonstrationszwecken (zum Anzeigen/Ausgeben) in einen String gepackt.
Wenn du die Werte in einem Array speichern willst, kommst du so heran:
C++:
struct tm *ptimeinfo = localtime(&finfo.st_mtime);

int Tag   = ptimeinfo->tm_mday;
int Monat = ptimeinfo->tm_mon + 1;
int Jahr  = ptimeinfo->tm_year + 1900;
"localtime" rechnet den Wert aus "finfo.st_mtime" richtig um.

Gruß
MCoder
 
Danke MCoder für die Erkärung.
Es funktioniert perfekt.
Auf die folgende Weise ist es mir gelungen nur einen int-Wert fürs ganze Datum zu verwenden:
Code:
struct _stat finfo; int Tag;
if( _stat(Pfad, &finfo) == 0 ) {
 struct tm *ptimeinfo = localtime(&finfo.st_mtime); 
 Tag   = (ptimeinfo->tm_mday)+(ptimeinfo->tm_mon + 1)*256+(ptimeinfo->tm_year + 1900)*256*256; }
std::cout << "Datum: " << Tag % 256 << "." << Tag/256 % 256 << "." << Tag/(256*256) << std::endl;

MfG
Olaf
 
Dateilänge ermitteln bei Read+Write Modus

Hallo,

jetzt gibts noch ein unerwartetes Problem.
Ich muss wissen wie lang die Datei ist.
Das versuche ich so:
Code:
fstream ReDat;               //Datei .txt öffnen
ReDat.open(Mod, ios_base::in | ios_base::out | ios_base::trunc | ios_base::binary);
int Bytes=0;
ReDat. seekg(0,ios_base::end);
Bytes = ReDat.tellg();     //Bytes merken

Nun sollte doch eigentlich die Anzahl der Bytes in der Variable Bytes stehen, oder?
Das merkwürdige ist: Ich verwende die Prozedur in mehreren Programmen und es t.
Das einzigste, was mir einfällt: Sonst öffne ich die Dateein nur im Lese-Modus, diesmal aber zum Lesen und Schreiben. Gibt es in dem Punkt einen Unterschied?

Olaf
 
Hallo Olaf,

die _stat-Funktion liefert dir auch die Dateigröße:
C++:
struct _stat finfo;
 
if( _stat("datei.rpy", &finfo) == 0 )
{
    long nSize = finfo.st_size; // Dateigröße
}
Gruß
MCoder
 
Hallo,

Deine Abfrage liefert auch das Ergebnis 0. Das liegt wirklich an trunc. Danke deepthroat.

Eigentlich wollte ich es so machen, dass ich gleich in die vorhandene Datei die Änderungen reinschreibe. Hab inzwischen aber gemerkt, dass das zu kompliziert ist. Dadurch überschreibe ich leicht vorhandene Daten, die an dieser Stelle stehen.
Werd es jetzt so machen, dass ich zweimal öffne einmal zum Lesen und dann alles zusammen neu schreibe.

Danke!
Olaf
 
Zurück