variable Anzahl Dateien öffnen
-
Hallo
ich möchte mit einem Befehlszeilenprogramm eine variable Anzahl Dateien öffnen. Die Dateinamen der zu öffnenden Dateien werden als Argumente in der Befehlszeile übergeben. Die Anzahl zu öffnender Dateien ist also gleich der Anzahl Argumente (argc).
Folgender Code kann leider nicht kompiliert werden ("term does not evaluate to a function"):
int main(int argc, char **argv) { ifstream * bmp = new ifstream[argc]; for (int i = 0; i < argc; i++) bmp[i](argv[i+1], ios::in|ios::binary); return 0; }
Hat jemand eine Idee, wie ich das machen kann?
-
die Objekte sind in deinem Fall ja schon konstruiert (new konstruiert Objekte) und du versuchst den Konstruktor noch einmal aufzurufen, dass geht natürlich nicht!
Aber an deiner Stelle würde ich das mittels std::vector machen
/*dieser Code hier war falsch!*/
-
Danke erstmal für die Antwort.
Mit vector kenne ich mich noch nicht wirklich aus. Ich hab's mal so versucht und es scheint so weit auch ganz gut zu funktionieren, aber beispielsweise folgende Codes werden danach nicht richtig ausgeführt:
files[0].seekg(0, ios::end); int size = files[0].tellg(); // ergibt eine völlig falsche Dateigrösse files[0].seekg(0, ios::beg);
char byte; files[0].read(&byte, 1); // funktioniert auch nicht
-
argh, mir fällt gerade auf, dass man std::ifstream gar nicht kopieren kann. Vergiss bitte schnell meinen Code
btw. ist int eh nicht der richtige Typ für die Datei größe und die Datei größe kannst du bei Binär Dateien so auch nicht abfragen.
-
Ich hab's hingekriegt.
int main(int argc, char ** argv) { argc--; FILE ** files = new FILE * [argc]; for(int i = 0; i < argc; i++) files[i] = fopen(argv[i+1], "rb"); ...
-
int main(int argc,char **argv) { std::ifstream *files=new std::ifstream[argc-1]; for(int i=1;i<argc;++i) files[i].open(argv[i]); //... delete[] files; }
Wobei du das Speichermanagement am besten abstrahieren solltest.