2011-09-04 21 views
6

Mam problem z nadpisaniem niektórych danych w pliku w języku C++. kod ja używam jestC++ nadpisywanie danych w pliku na określonej pozycji

int main(){ 
    fstream fout; 
    fout.open("hello.txt",fstream::binary | fstream::out | fstream::app); 
    pos=fout.tellp(); 
    fout.seekp(pos+5); 
    fout.write("####",4); 
    fout.close(); 
    return 0; 

}

problem jest nawet po użyciu seekp, dane są zawsze zapisywane w end.I chce napisać go w określonej pozycji. A jeśli nie dodaję aplikacji fstream :: app, zawartość pliku zostanie usunięta. Dzięki.

+0

Jaka jest dokładna pozycja danych, które chcesz zastąpić? – Flinsch

Odpowiedz

8

Problem polega na tym, że fstream::app - otwiera plik do dodania, co oznacza, że ​​wszystkie zapisy przechodzą na koniec pliku. Aby uniknąć wymazania zawartości, spróbuj otworzyć także z fstream::in, co oznacza, że ​​należy otworzyć przy pomocy fstream::binary | fstream::out | fstream::in.

+0

ale isnt fstream :: in do odczytu ze strumienia, w jaki sposób będę mógł napisać do strumienia za pomocą tego? – karyboy

+2

Jeśli użyjesz zarówno 'fstream :: in' i' fsteam :: out ', otworzysz plik do odczytu i zapisu - co oznacza, że ​​zostanie otwarty do zapisu bez usuwania poprzedniej zawartości. –

+0

Thanx mate, jesteś zbawcą ..... – karyboy

2

Chcesz coś

fstream fout("hello.txt", fstream::in | fstream::out | fstream::binary); 
fout.seek(offset); 
fout.write("####", 4); 

fstream::app informuje go, aby przejść do końca pliku przed każdą operacją wyjściowego, więc nawet jeśli wyraźnie dążą do położenia, miejsce zapisu zostaje zmuszony do końca, kiedy robisz write() (czyli seekp(0, ios_base::end);).

cf. http://www.cplusplus.com/reference/iostream/fstream/open/

Inną rzeczą, na którą należy zwrócić uwagę, jest to, że po otwarciu pliku z fstream::app, tellp() powinien zwrócić koniec pliku. Tak więc seekp(pos + 5) powinien próbować wyjść poza bieżący koniec pozycji pliku.

+0

thnk u do u też za wskazanie tego .... teraz wszystko działa zgodnie z przeznaczeniem .. – karyboy

Powiązane problemy