2013-09-19 6 views
0
#include <iostream> 
#include <string.h> 
#include <fstream> 
#include <conio.h> 
using namespace std; 
int main(int argc, char*argv[]) 
    { 
ifstream fpr; 
ofstream fpw; 

char * rec1 = "helloWorld"; 
char * rec2 = "my"; 
char out1[50]; 
char out2[50]; 
fpw.open("sample.txt",ios::in|ios::binary|ios::app); 
if(fpw.fail()) 
{ 
    cout<<"The file could not be opened!\n"; 
    exit(1); // 0 – normal exit, non zero – some error 
} 
fpr.open("sample.txt",ios::out|ios::binary); 
if(fpr.fail()) 
{ 
    cout<<"The file could not be opened!\n"; 
    exit(1); // 0 – normal exit, non zero – some error 
} 
fpw.write(rec1,10); 
fpr.read(out1,10); 
out1[10] = '\0'; 
cout<<out1<<"\n"; 
fpw.seekp(2,ios::beg); 
fpw.write(rec2,2); 
fpr.seekg(0,ios::beg); 
fpr.read(out2,strlen(rec1)); 

cout<<"\n"<<out2<<"\n"; 
getch(); 
    } 

С помощью этого кода я просто хочу вставить строку с именем 'my' в расположение 2 байта строки 'helloworld'. Но он не вставляет его (хотя я и ищу подходящее место). Может ли кто-нибудь помочь мне?fstream запись/чтение в двоичный файл не работает должным образом.!

+0

Я думаю, что знаю, но для кого-то еще, прочитавшего это сообщение позже, можете ли вы описать, что из этого получается? –

+0

Открытие двух потоков в одном файле выглядит подозрительным для меня. – john

ответ

0

из документации по ios::mode

КСН :: приложение:

содержание к текущему содержимому файла. Этот флаг может быть использован только в потоках, открытых для вывода только operations.All операций вывода выполняются на конце файла, добавление

Снимите ios::app, и вы будете иметь возможность писать "my" над "ll" в «helloworld».

Обратите внимание, что вы не сможете «вставить» что-то в файл - единственный способ добиться этого - прочитать исходный файл и записать новые данные в новый файл [или прочитать все, что после вас хотите изменить, вставить нужный текст и записать нужные вам части после модифицированного бита].

Смежные вопросы