Fufialk Geschrieben 18. November 2005 Geschrieben 18. November 2005 Folgendes Problem: Bei einer zu bearbeitenden Datei ist ein Datum als Hexwert im Dateinamen angegeben, z.B.: 43542CF0.DAT dieses möchte ich gerne in ein lesbares Format umwandeln und als Namen übergeben, zum Beispiel 18 11 2005.txt Derzeit entnehme ich diesen Zeitstempel immer direkt aus der Datei, mit: struct stat buf; stat(argv[f], &buf); groesse = buf.st_size; ifl.seekg(2*sizeof(short), ios::beg); // an dieser Stelle im File sind Datum & Uhrzeit hinterlegt ifl.read((char*)&zeit, sizeof(int)); time_t timer; struct tm *tblock; tblock = localtime(&zeit); sprintf(filewrite,"C:\\Messdaten\\Auswertung\\CUT\\%02d %02d% 04d.txt ",tblock->tm_mday,tblock->tm_mon+1,tblock->tm_year+1900); Das Problem ist, dass bei einigen Dateien das im File hinterlegte Datum nicht stimmt, was teilweise sogar zum Programmabsturz führt, was ich gerne vermeiden möchte. Meine Überlegung: Da der Dateiname immer die selbe Länge hat, und die Dateien immer im selben Verzeichnis liegen, sollte der Zeitstempel, also für unser Beispiel: 43542CF0 mit Hilfe eines Array recht einfach zu separieren sein, wie kann ich diesen wert jedoch meiner Variable zeit zuweisen? Zitieren
Klotzkopp Geschrieben 18. November 2005 Geschrieben 18. November 2005 Das geht mit strtol aus <cstdlib> zeit = strtol("43542CF0.DAT", 0, 16); Die 16 ist dabei die Basis des zu verwendenden Zahlensystems, hier also Hex. Zitieren
Fufialk Geschrieben 21. November 2005 Autor Geschrieben 21. November 2005 Meine Überlegung: Da der Dateiname immer die selbe Länge hat, und die Dateien immer im selben Verzeichnis liegen, sollte der Zeitstempel, also für unser Beispiel: 43542CF0 mit Hilfe eines Array recht einfach zu separieren sein, wie kann ich diesen wert jedoch meiner Variable zeit zuweisen? Da habe ich mich wohl etwas zu weit aus dem Fenster gelehnt. Ich übergebe den Dateinamen per Drag&Drop über die Variable argv[1]: int main(int argc, const char* argv[]) erhalte den kompletten Pfad : C:\Pfad\4320C271.DAT zeit = strtol(argv[1],0, 16); liefert jetzt ein falsches Ergebnis. Ich benötige also noch eine Funktion, die mir nur den Namen der Datei aus argv[1] ausgibt. Zitieren
Guybrush Threepwood Geschrieben 21. November 2005 Geschrieben 21. November 2005 Wie wärs mit selber kopieren? Zitieren
Fufialk Geschrieben 21. November 2005 Autor Geschrieben 21. November 2005 Wie wärs mit selber kopieren? Du meinst mit strcopy? Zitieren
Guybrush Threepwood Geschrieben 21. November 2005 Geschrieben 21. November 2005 zum Beispiel Zitieren
Aquano Geschrieben 22. November 2005 Geschrieben 22. November 2005 Wie wäre es mit: Stringfunktionen? Die Prosition des letzten "/" ermitteln und evt. noch die Position des letzten "." . Dazwischen liegt Dein Dateiname. char *strrchr(const char*zeichenkette, int zeichen). Oder z.B. die Stringlänge ermitteln und die letzten 19 Zeichen herauskopieren Zitieren
Fufialk Geschrieben 24. November 2005 Autor Geschrieben 24. November 2005 Du meinst etwa mit folgendem Fragment: char *strrchr( const char *argv[1], '134'); // 134 = Dez für \ cout << strrchr; // sollte dann nur den Dateinamen 43542CF0.DAT ausgeben [/PHP] Habe ich noch zwei Fehlermeldungen drin: Expression syntax in function main(int,char * *) ) expected in function main(int,char * *) genau in dieser Zeile. Leider findet sich in der cpprefference auch nicht mehr als Hinweis. Zitieren
Fufialk Geschrieben 24. November 2005 Autor Geschrieben 24. November 2005 Hab es zum Glück selbst gemerkt. Naja und auch hier im Forum den Einstieg zur Lösung gefunden. char* find = strrchr(argv[f], '\\'); //letztes "\" finden strncpy(fwrite,find+1, 12); //alles ab "\" kopieren und fwrite zuweisen [/PHP] Vielen Dank an alle, die mich auf den rechten Weg gewiesen haben, und einen schönen Abend noch. Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.