Nadpisanie danych w pliku binarnym

0

Mam problem z nadpisaniem danych w pliku binarnym. Ponieważ jestem poczatkującym, więc niebardzo wiem, w jaki sposób to zrobić, ponieważ zauważam kilka problemów z tym związanych.
Oto co chce dokładnie zrobić.

Mam plik binarny bdący jakąśtam bazą danych, w którym zapisałem kilka struktur. Chcę wejść i podmienić danę jednej z zapisanych struktur.
Więc robię to następująco:

fstream plik;
plik.open("baza_autorow.dat", ios::in | ios::out | ios::app, ios::binary);
if(!plik) cout<<"Error!";

plik.seekp(pozycja); //przesywam dane do żądanej pozycji
plik.write((char*)&nowy_autor, sizeof(autorzy)); //i zapisuje moją nową strukture rzekomo na miejscu 'pozycja'

Okazuje się jednak, że zapisuje mi te dane zawsze na końcu pliku. Jakieś pomysły jak to wykonać?

Oto struktura którą zapisuje:

struct autorzy
{
 char autor_id[5], imie[25], nazwisko[50];
 float zarobek;
};

Spędza mi to sen z powiek, więc proszę o pomoc .... [glowa]

0

Spróbuj bez flagi ios::app.

0

Po pierwsze bez ios::app, bo to jest ustawianie sie na końcu pliku po otwarciu, ale spróbuj tez np wczytywać cały plik i zapisywać od nowa, już podmieniając daną strukturę.

0

Witam.

Jest jeszcze flaga ios::ate, wprawdzie wskaznik ustawia sie na koncu pliku, ale mozna za pomoca funkcji seekp przesuawc ten wskaznik.

Pozdrawiam.

<url>www.keywords.prv.pl</url>

0

Zrób to w ten sposób:

plik.open("baza_autorow.dat", ios::binary | ios::in);

Na pewno zadziała

0

Faktycznie trzeba było użyć bez ios:app. Okazuje się, że iso:app nakazuje ZAWSZE dołączać dane na końcu (bez względu na to gdzie się aktualnie znajduje wskaźnik pliku).

Także ogromne dzięki za pomoc.

A tak btw:
Byku - wczytywanie pliku nie wchodzi w grę. Przy tworzeniu bazy moim zdaniem należy wziąć pod uwagę, iż może ona posiadać sporo wpisów (np. 10GB). Wtedy wczytanie tego do pamięci mija się z celem :P

0

Nie musisz wczytywac calej do pamięci, mozesz po jednym kopiowac do pamieci i zapisywac w drugim pliku:) Ale ok zgadzam sie sposob z nadpisywaniem bedzie lepszy :d

1 użytkowników online, w tym zalogowanych: 0, gości: 1