Ö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


  • Mod

    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 Befehl

    rename *.dat Test.dat

    die Datei lasse ich dann mit ifstream öffnen 😉



  • Mr. Stream schrieb:

    1. Danke
    Habs geschafft mit einen DOS Befehl

    rename *.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 Befehl

    rename *.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 rename

    bb



  • unskilled schrieb:

    Scorcher24 schrieb:

    Mr. Stream schrieb:

    1. Danke
    Habs geschafft mit einen DOS Befehl

    rename *.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 rename

    bb

    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.


Log in to reply