Öffnen einer Datei (Streams) problem
-
Hi,
ich möchte eine Datei mittels ifstream öffnen. So das Problem ist: Ich weiß nur die Dateiendung, nämlich .dat. Der Name ist beliebig. Wie kann ich eine Datei öffnen, die im selben Verzeichnis ist, die immer einen anderen Namen hat aber die Dateiendung immer .dat ist.z. B.
ifstream file("*.dat"); file.close();
wieso funktioniert das nicht
Danke
-
Das kann nicht funktionieren, weil für ifstram der volle Dateiname bekannt sein muss. Du musst dir also vorher die Dateinamen aller Dateien mit *.dat beschaffen
und dann eine davon auswählen.
-
ok, Danke
Hast du ein Beispiel wie das funktioniert? Oder eine Erklärung?
Danke
-
Wie soll das denn beispielsweise funktionieren, wenn es mehrere .dat Dateien gibt? Der Name muss schon eindeutig sein.
Wenn es darum geht, wildcards wie * aufzulösen ist natürlich die shell gefragt, von der das Programm gestartet ist. Innerhalb deines Programms musst du dich daher an diese Wenden um sowas zu erfahren. Eine brauchbare Bibliothek die sowas halbwegs plattformunabhängig macht, ist boost::filesystem.
Eine sehr einfache Alternative, die vielleicht in Frage kommt ist die Übergabe des Dateinamens über die Kommandozeile. Wenn du in der Kommandozeile nämlich wildcards verwendest, dann werden diese von der shell schon vor dem Programmstart ausgewertet und das Programm bekommt dann die ausgewerteten Dateinamen übergeben.
-
1. Danke
Habs geschafft mit einen DOS Befehlrename *.dat Test.dat
die Datei lasse ich dann mit ifstream öffnen
-
Mr. Stream schrieb:
1. Danke
Habs geschafft mit einen DOS Befehlrename *.dat Test.dat
die Datei lasse ich dann mit ifstream öffnen
LOL? Die Datei hiess *.dat? Too funny..
rya.
-
Scorcher24 schrieb:
Mr. Stream schrieb:
1. Danke
Habs geschafft mit einen DOS Befehlrename *.dat Test.dat
die Datei lasse ich dann mit ifstream öffnen
LOL? Die Datei hiess *.dat? Too funny..
rya.bestimmt nicht... versuch doch mal, * in nem dateinamen eingeben zu wollen...
offensichtlich weiß er einfach nicht, wie die dat heißt und wollte deshalb die wildcard nutzen... da das nicht ging, eben die krücke mit renamebb
-
unskilled schrieb:
Scorcher24 schrieb:
Mr. Stream schrieb:
1. Danke
Habs geschafft mit einen DOS Befehlrename *.dat Test.dat
die Datei lasse ich dann mit ifstream öffnen
LOL? Die Datei hiess *.dat? Too funny..
rya.bestimmt nicht... versuch doch mal, * in nem dateinamen eingeben zu wollen...
offensichtlich weiß er einfach nicht, wie die dat heißt und wollte deshalb die wildcard nutzen... da das nicht ging, eben die krücke mit renamebb
Ja eigentlich sollte es nicht gehen... aber windows läst auch keine Dateien ohne namen zu, bzw Dateien die mit einem Punkt beginnen, man kann es aber über die console trotzdem erreichen. Auf *.txt hab ichs aber auch nicht geschafft.
rya.
-
Scorcher24 schrieb:
aber windows läst auch keine Dateien ohne namen zu, bzw Dateien die mit einem Punkt beginnen
Punkt am Anfang ist kein Problem.
D:\tmp>echo foo > ....txt D:\tmp>dir ...* Volume in Laufwerk D: hat keine Bezeichnung. Volumeseriennummer: DEAD-BEEF Verzeichnis von D:\tmp 05.11.2009 20:49 6 ....txt 1 Datei(en) 6 Bytes 0 Verzeichnis(se), 3.073.025.003.520 Bytes frei
-
Spaß mit Unicode:
Microsoft Windows XP [Version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. D:\tmp>echo foo > ٭.txt D:\tmp>dir ٭.txt Volume in Laufwerk D: hat keine Bezeichnung. Volumeseriennummer: DEAD-BEEF Verzeichnis von D:\tmp 05.11.2009 20:58 6 ٭.txt 1 Datei(en) 6 Bytes 0 Verzeichnis(se), 3.073.025.003.520 Bytes frei D:\tmp>dir *.txt Volume in Laufwerk D: hat keine Bezeichnung. Volumeseriennummer: DEAD-BEEF Verzeichnis von D:\tmp 05.11.2009 20:49 6 ....txt 05.11.2009 20:48 6 .txt 05.11.2009 20:58 6 ٭.txt 3 Datei(en) 18 Bytes 0 Verzeichnis(se), 3.073.025.003.520 Bytes frei D:\tmp>
Das Forum zeigt es unhübsch an. Mit Klick auf Zitieren sollte es ok sein.
-
Add volkard: Jo ... Dann hat er auf der DOS-Ebene die Dateien. Er will sie aber in seinem C-Programm haben und dort gezielt lesen. Für eine Windows-Programmierung wäre die Sache viel einfacher.