ifstream zur Laufzeit



  • Hallo,

    wie kann ich es erreichen, dass im unten folgenden Beispiel, die Dateinamen die in
    sr.Name“ stehen von ifstream infile geöffnet werden können.
    Versuche wie

    ifstream infile("a:\\sr.Name");
    

    sind leider fehl geschlagen.

    TSearchRec sr;
    String s;
    char buff[ 50 ];
    int d;
    int anzahl = 0;
    
     d = FindFirst("a:\\*.hst",1,sr);
    while(!d)
    {
     Memo1->Lines->Add (sr.Name);
     anzahl++;
      s=  sr.Name;
     ifstream infile("a:\\sr.Name)");
       infile >> buff;
      while ( !infile.eof() )
      {
      Memo2->Lines->Add(buff);
      infile >> buff;
      }
    
      infile.close();
      d = FindNext(sr) ;
    
     }
    Memo1->Lines->Add ("Es wurden " + IntToStr(anzahl)+" Dateien gefunden");
    FindClose(sr);
    


  • Achso, nach 10 mal durchlesen habichs dann verstanden(denkich) 😃

    also einfach:

    TSearchRec sr;
    
    d = FindFirst("a:\\*.hst",1,sr);
    ifstream infile(((AnsiString)("a:\\"+sr.Name)).c_str()); //weiss jetzt nicht genau ob bei sr.name das "a:\\" schon drinsteht, inner hilfe steht aber basisdateiname und ja ich weiss c casts sind out -_-
    //und jetz wie gehabt
    

    und für buff würdich mal einen std::string nehmen sonst hast du ein Prblem wenn Name grösser als 50 byte bzw du verschwendest immer ne ganze menge

    Aber allgemein kannst du jederzeit den Dateinamen ändern mit dem du einen fstream aufrufst... der braucht kein const char array sondern einfach nur einen Pfad. Vieleicht verdeutlicht das das:

    // legt 30 Dateien mit zufälligem Namen im exe Verzeichnis an, kein Gewehr auf Richtigkeit da ungetestet
    
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main(int argc, char* argv[])
    {
    
      char dateiname[10];
    
      for(int j = 0; j< 30; j++)
      {
        for(int i = 0; i < sizeof(dateiname);i++)
        {
          dateiname[i] = random(25)+97; // a bis z
        }
    
      dateiname[9] = 0; // 0 am ende
      dateiname[5] = '.'; // erweiterung;
    
      ofstream datei(dateiname);
      string zwischen = "hallo";
      string zwischen2 = "schöne Welt";
      int zwischen3 = j;
      datei<<zwischen<<" "<< zwischen2 << " : " << zwischen3;
      datei.close();
    
      }
    
      return 0;
    }
    

    [ Dieser Beitrag wurde am 12.03.2003 um 11:05 Uhr von dreaddy editiert. ]



  • okay , danke

    ich habe es mir auch so gedacht und jetzt auch nachvollziehen können.

    so gehts dann:

    AnsiSting s = "a:// + sr.Name" 
    ifstream infile (s.c_str());
    

    Ist ja das was Du auch gemeint hast.

    Die andere Lösung werde ich mir mal durch den Kopf gehen lassen.


Anmelden zum Antworten