FStream bestimmte Byte-Bereiche schreiben
-
Hallo!
Ich möchte mit meinem Programm eine Datei einlesen und zum Schluss möchte ich dann einen bestimmten Bereich dieser Datei wieder in eine neue Datei schreiben.
Ich dachte das man vielleicht irgendwie angeben kann von wo er Anfangt mit schreiben und wo er endet. Aber das haut irgendwie nicht so richtig hin.
Vielleicht habt Ihr ja einen Tipp!
Hier mal der Code:using namespace std; fstream FileBin("c:\\muell\\muell.exe", ios::in|ios::out|ios::binary); if (FileBin.is_open()) { // Dateigröße bestimmen. FileBin.seekg(0, ios::end); streampos FileSize = FileBin.tellg(); FileBin.seekg(0, ios::beg); // Puffer anlegen und Datei einlesen. char* pBuffer = new char[FileSize]; FileBin.read(pBuffer, FileSize); fstream FileBin("c:\\muell\\muell2.exe", ios::in|ios::out|ios::binary); if (FileBin.is_open()) { FileBin.seekg(0, ios::beg); // Hier möchte ich nun angeben können von wo er anfangen soll zu // schreiben und wo er enden soll! //so in etwa dachte ich: FileBin.write(pBuffer,120,240); FileBin.write(pBuffer,FileSize); } delete [] pBuffer; }
[ Dieser Beitrag wurde am 14.02.2003 um 13:20 Uhr von ratfury editiert. ]
[ Dieser Beitrag wurde am 14.02.2003 um 13:22 Uhr von ratfury editiert. ]
-
fstream FileBin("c:\\muell\\muell2.exe", ios::in|ios::out|ios::binary); if (FileBin.is_open()) { FileBin.seekg( 0, ios::beg ); // mit seekg setzt man den lese (g für get) zeiger FileBin.seekp( 0, ios::beg ); // mit seekp setzt man den schreib (p für put) zeiger // 0 ist am anfang, 10 sind 10 bytes weiter FileBin.seekp( 10, ios::beg ); FileBin.write( pBuffer, 10 ); // schreibe 10 zeichen // so jetzt haben wir 10 zeichen an pos 10 geschreiben }
ahja in den faq thread gibt ein ähnliches bsp
[ Dieser Beitrag wurde am 14.02.2003 um 14:53 Uhr von Dimah editiert. ]
-
Hallo,
ich grad das hier mal aus und häng mich rein. Ich hab folgendes Problem. Mit diesen Codeschnipseln kann man ja wunderbar beliebig lange Textteile an beliebigen Stellen aus einer Datei rausholen und in eine andere reinschreiben.
Ich würde aber lieber zB 5 Zeichen in einen String (kann auch ein chararray sein) schreiben, nicht in die Datei. Das klappt aber nicht.
wenn ich
stringstream test; string test2;
...
FilebinAUS.seekp( zaehler, ios::beg ); test << FilebinAUS.write( pBuffer, 5 ); // schreibe 10 zeichen test >> test2; cout << test2;
mache, steht im String "0xFFFFFF" und er schreibt richtig (eine Folge von Buchstaben und Zahlen) in die Datei, was er nicht soll. Ich dachte, ich würde so den Strom umleiten können. Was mache ich falsch?
Ich hoffe, ihr könnt mir helfen.
Noch einen schönen Abend. MFG Waltraut