Ponowny odczyt pliku i zapis

0

Witam.

Piszę projekt na zaliczenie i mam problem z obsługą plików. Działam biblioteką fstream i wszystko idzie dobrze dopóki nie odczytam całego pliku. Działam blokowo na danych binarnych i gdy odczytam juz wszystko, żaden zapis nie chcę się odbyć poprawnie. Sam odczyt też nie działa dopóki nie zamkne i na nowo nie odczytam pliku. I ten właśnie problem powstał po zamknięciu pliku.

plik.write((char*)bufor,ROZMIAR_STRONY);
...
plik.read((char*)bufor,ROZMIAR_STRONY);

To funkcje jakimi zapisuję i odczytuję. ROZMIAR_STRONY to stała mówiąca ile bajtów zajmuje strona dyskowa. samo plik.seekg(0,ios_base::beg) nia działa by plik ustawić na początek.
Czy jest jakaś flaga, czy inna opcja lub sposób by po ponownym otworzeniu pliku można było do niego zapisywać ?? Lub w ogóle czy można to wykonać bez zamykania pliku. Po zapisaniu pliku wopalam plik.flush();

0

a jak otwierasz ten plik?

0
	bufor.plik.open(n, ios_base::binary | ios_base::trunc | ios_base::in | ios_base::out );
		bufor.plik.open(nazwa,ios_base::in | ios_base::out | ios_base::binary);

Za pierwszym razem tak jak wyżej, za kazdym kolejnym jak niżej :D

0

Hmm trochę mało kodu dałeś. Zdefiniuj jeszcze co znaczy nie działa ;)

0

Nie chce całego kodu kopiować bo troche długi, ale jakby co to skopiuje :) Chodzi o to, że otwieram 3 pliki, które mają realizować strukturę indeksowo-sekwencyjną. Każde 3 są otworzone i cały czas modyfikowane. Odczytywane i pisane blokowo, bo symuluję dysk twardy. Jeżeli tylko czytam, lub tylko piszę, to wszystko ok. Ale jak sprawdzam każdy rekord na stronie, potem zapisuje gdzies itd. Wskaźniki na plikach zaczynają się gubic. seek mnie nie słucha :( a potem gdy podglądam plik w edytorze szesnastkowym plik jest pusty. Ale tylko w przypadku gdy wcześniej czytałem.

0

A ustawiasz odpowiednio kursory? Bo są dwa: jeden do czytania seekg i jeden do pisania seekp? Może tylko jednym się posługujesz? Nic innego mi nie przychodzi do głowy :/

0

używam tego i tego :) jeżeli przelecę cały plik readem, a potem ustawię plik.seek(0,ios_base::beg); i znów chcę lecieć, to przegapi, albo całą stronę, albo nic nie wyświetla :/ Męczę się już kilka dni, a na jutro musze mieć napisany :P więc za późno, żebym zaczynał pisać w języku przyjaźniejszym obsłudze plików.

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