usunięcie rekordu z pliku binarnego

0

Witam, mam następujący problem;
do pliku zapisuję dane w formie określonej struktury, i chcę usunąć np. piąty rekord(a jest ich przypuśćmy 20). Czy da się to zrobić bez nadpisywania 5tego rekordu 6, 6tego 7 itd? czy jest jakaś inna metoda?

0

Wczytać cały plik do pamięci, wyciąć odpowiedni rekord, zapisać do pliku. Innej metody nie ma.
Kwestia czy da się wyciąć dane ze środka bez przenoszenia reszty? Nie da się, ale możesz to zrobić jakims automatycznym mechanizmem jak memcpy()

0

chodziło mi o to czy da się bez wczytywania całego pliku. no ale jak się nie da - to trudno. dzięki za zainteresowanie

0

Starsze wersje worda robiły tak, że na końcu pliku były informacje, które dane pominąć, a które zastąpić (i czym). Tzw. opcja quick save.
Word zapisywał cały plik porządnie dopiero jak się robiło save.
Jeśli naprawdę zależy ci na szybkości to możesz tak zrobić.

Pytanie, czy wtedy używanie pliku na dysku do przechowywania ma sens...

0

Przecież możesz odczytać dowolny rekord z pliku binarnego. Struktura ma stały, określony rozmiar, więc dla piątego musisz przesunąć wskaźnik czytania na 5*sizeof(struktura) i przeczytać tylko tyle ile potrzebujesz(czyli znowu sizeof(struktura) ) :)

Raczej nie da rady "wyciąć" bez ponownego zapisu całości, ale możesz w to miejsce zapisać np. zera i później je pomijać.

0

dobre rozwiązanie pod warunkiem że usuwa się raz na jakiś czas i małą ilość danych.

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