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