Lowlevel
Lowlevel => Lowlevel-Coding => Thema gestartet von: DarkThing am 19. May 2005, 13:30
-
Ich habe einen ifstream für einen Inputfile und einen ofstream für den Outputfile. Nach einer Funktion möchte ich dass der erstellte Outputfile zum neuen Inputfile wird. Der Outputfile wird tempx genannt. x steht dabei für eine Zahl die immer weiter erhöht wird. Also etwas so:
Out: In:
temp0 File.txt
temp1 temp0
temp2 temp1
...
Dafür verwende ich diesen Code:
// Alten Input-File schließen
FileIn->close();
// Alten Outputfile schließen
FileOut->close();
// Erstellten Temp-File zum Inputfile machen
char buffer[200];
int j = sprintf(buffer, "temp%d", iTempFileNum);
buffer[j] = '\0';
FileIn->open(buffer);
// Temp-File Anzahl erhöhen
iTempFileNum++;
// Neuer Temp-File ist jetzt der Outputfile
char buffer2[200];
int k = sprintf(buffer2, "temp%d", iTempFileNum);
buffer2[k] = '\0';
FileOut->open(buffer2);
Das scheint auch problemlos zu funktionieren, aber das Lesen beginnt danach am Dateiende. Das heißt man bekommt sofort ein eof.
Also die Frage: Wie kann ich den "Cursor" an den Dateianfang setzen.
-
Da du ja scheinbar eigene Klasse gebastelt hast, wäre es wohl interressant welche Methode du benutzt um auf die Dateien zuzugreifen. fopen, open, was anderes?
-
Ich verwende einfach die Standard fstreams von C++ unter Windows. Also so:
; Files öffnen
ifstream *FileIn;
ofstream *FileOut;
FileIn = new ifstream("File.txt");
FileOut = new ofstream("temp0");
; Zeichen lesen
char ch;
FileIn->get(ch);
; Zeichen schreiben
FileOut->put('A');
Das ganze hat also gar nixhts mit OS-Dev zu tun.
So weit binich inzwischen:
Das hier sollte dafür sorgen, dass man beim Dateianfang anfängt:
FileIn->seekg(0, ios_base::beg);
Aber das schlägt immer fehl.
-
Wenns nix mit OSDev zu tun hat wäre es sinnvoll gewesen es in OffTopic zu posten.
-
Wenns nix mit OSDev zu tun hat wäre es sinnvoll gewesen es in OffTopic zu posten.
Ja ok. Aber es hat ja schon was mit programmieren zu tun. Und im Offtopic-Bereich gibts ja fast gar nichts in der Richtung. Aber von mir aus kanns auch verschoben werden :wink:
-
Hat niemand ne Idee? Im Prinzip müsste man nur an den Dateianfang wechseln. Afaik geht das mit
FileIn->seekg(0, ios_base::beg);
Aber das will irgendwie nicht gehen.
Sol als Motivation zum Antworten: :wink:
Das ganze brauch ich für den Compiler (eigentlich erstmal dem Präprozessor): Der soll das Ergebnis von einem Schritt (z.B. Includes auflösen) in einen Temp-File schreiben und den danach als Inputfile verwenden. Man könnte das ganze natürlich nur im RAM zwischenspeichern, aber dann kann man nicht das Ergebnis sehen.
-
Ich habs jetzt gelöst:
Vorher habe ich das so gemacht:
char buffer[200];
FileIn->close();
FileOut->close();
// In buffer etwas schreiben...
FileIn->open(buffer);
// Wieder was in Buffer schreiben...
FileOut->open(buffer);
Jetzt mach ich das so und es geht:
char buffer[200];
FileIn->close();
FileOut->close();
delete FileIn;
delete FileOut;
// In buffer etwas schreiben...
FileIn = new ifstream(buffer);
// Wieder was in Buffer schreiben...
FileOut = new ofstream(buffer);