File* f Function als Argument übergeben.
-
Hallo,
void ReadFromFile(){ if( (err = fopen_s( &f, filePath, "rb" )) !=0 ) exit(1); fseek(f,0,SEEK_END); int len = ftell(f); if(f){ fclose(f); } }Das wird ca. 400 mal aufgerufen.
Diesen Code muß ich umschreiben. Ich denke der ist ineffizient. Ich würde gerne FILE* als Funktionsargument einsetzen und somit die Datei nur einmal zu öffnen.
Wie fange ich da los?Gruß
-
Ein Anfang wäre es einmal ein Funktionsargument anzugeben?
-
Die Funktion (die erstmal in C und nicht C++ geschrieben ist) hat überhaupt keinen Sinn. Du willst also 400 mal ineffizienten Nonsens in 400 mal schnellen Nonsens umwandeln?
void ReadFromFile(FILE* f) { if (!f) exit(1); }Du musst schonmal ein bischen genauer erklären was du willst.
-
Hi,
ja ich hette Zeilen dazwischen heraus genommen, die Dann mit den Daten der Datei was machen
also nachdem geöffnet und wird dann...
fseek(f,0,SEEK_END); int len = ftell(f)/2; frame = len/(height*width);Frames werden aus einer Datei gelesen. Das geschieht allerdings für jedes Frame.
Ich hatte mir nur gedacht, das "fopen_s" "fclose(f)" 400 mal aufgerufen ist nicht gut, also die Datei in der Elternklasse schon mal öffnen und dann in der Verarbeitenden Klasse dann lesen.Gruß
Frank
-
Also du willst so etwas machen ?
FILE * f = OpenFile(); for (400 mal){ ReadFromFile(f); }400 mal die selbe Datei zu öffnen um darin zu lesen ist natürlich unpraktisch.
Aber was ist jetzt die Frage?
-
Wenn du aus jeder Zeile was auslesen willst solltest du in c++ Vectoren benutzen oder array (array hab ich noch nie benutzt und weiß nicht ob das geht).
Wenn du mit einer funktion dateien öffnen willst dann mach doch:
void lesen(const char *datei) { FILE * f; f = open(datei, "r"); }Ich weiß nicht ob das funktioniert hab auch nur hin und wieder mal so programmiert da ich die c++ Variante benutze zum auslesen von Dateien.
Wenn ich was falsch hab verbessert mich bitte.
-
C:
void read_from_file(FILE* f) { // whatever ... } // anywhere in your application ... int i; FILE* f; f = fopen(filename, "rb"); if (!f) // file could not be opened ... for (i = 0; i < ...; ++i) read_from_file(f); fclose(f);Da wir hier aber im C++-Unterforum sind:
void read_from_file(std::ifstream& f) { // whatever ... } // anywhere in your application ... std::ifstream f(filename); if (!f) // the same: if (!f.is_open()) // file could not be opened ... for (int i = 0; i < ...; ++i) read_from_file(f); // f will be closed and destroyed automatically ...Ich denke, egal ob die C-Variante oder C++, es ist reine Geschmackssache, oder Überzeugung.
Gut Schuß
VuuRWerK
-
Hi,
danke für die Antworten! Machmal ist es gut Denkanstösse zu bekommen.
Wenn ich könnte würde ich die ganze Anwendung neu schreibne, aber ich soll nur ein paar Funktionen auf Sinn prüfen.Ich hatte eigentlich eine C++ Variante gesucht. Aber mein Hauptanliegen ist (war)
die fopen_s "einmal" irgendwo zu nutzen und dann nur noch lesend (schreibend) auf die Dateien zuzugreifen.Gruß
Frank