Zum Inhalt springen

Dateinamen in Wert umwandeln


Empfohlene Beiträge

Geschrieben

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?

Geschrieben
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.

Geschrieben

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

Geschrieben

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.

Geschrieben

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.

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...