ďťż

Ładny brzuch

Mam strukturę składającą się z 5 pól składowych. Zapisałem ją do pliku. Następnie kolejną strukturę dopisałem do tego pliku. Wszystko za pomocą funkcji fwrite. Teraz chcę jedną z tych struktur usunąć z pliku. Jak to zrobić?



zapisac to co było przed strukturą, potem to co po - a potem wszystko zapisac
//
albo inaczej jak sie na nadpisywac to ponadpisuj bajty za pomocą write, czyli tak jakby przesun wszyskto o jedna strukture do tyłu ;)
Użytkownik Artur Menc edytował ten post 06 styczeń 2007, 22:45
Możesz wczytać wszystkie struktury z pliku do pamięci, oprócz tej którą chcesz skasować, a resztę z powrotem wrzucić do pliku.


Możesz wczytać wszystkie struktury z pliku do pamięci, oprócz tej którą chcesz skasować, a resztę z powrotem wrzucić do pliku.

SUPER RADA :> Szczegolnie efektywne w przypadku kiedy usowany rekord znajduje sie na koncu pliku a dane maja sporawy rozmiar.
Mozna to robic dwoma sposobami: sekwencyjnie i nie sekwencyjnie. Pierwszy polega na: wczytaniu do pamieci tablicy rekordow znajdujace sie za usowanym, ustawic wskaznik pliku na rekordzie ktory ma zostac usuniety, a na koniec zapisac sekwencyjnie dane z pamieci do pliku.
Mozna takie operacje na duzych plikach nieco przyspieszyc. Znajac rozmiar rekordu SizeOf(myRecord) mozemy: (1) wczytac /nie sekwencyjnie/ do bufora dane znajdujace sie za struktura (2) ustawic wskaznik pliku na poczatku rekordu ktory ma zostac usuniety (3) zapisac bufor.
Milej zabawy :)
Użytkownik stan24 edytował ten post 07 styczeń 2007, 00:30



SUPER RADA :> Szczegolnie efektywne w przypadku kiedy usowany rekord znajduje sie na koncu pliku a dane maja sporawy rozmiar. Mysle, ze wskazowka Artura jest optymalna ;) z mala uwaga - nie wczytywac rekordow poczatkowych tylko i wczytac do pamieci rekordy znajdujace sie za usowanym, wskaznik pliku na rekordzie ktory ma zostac usuniety, a na koniec zapisac dane z pamieci. Mozna takie operacje na duzych plikach nieco przyspieszyc. Znajac rozmiar rekordu SizeOf(myRecord) mozemy: (1) wczytac /nie sekwencyjnie/ do bufora dane znajdujace sie za struktura (2) ustawic wskaznik pliku na poczatku rekordu ktory ma zostac usuniety (3) zapisac bufor.
Milej zabawy :)

Myślałem, że autorowi tematu chodzi o dwie struktury. :P Czyli w tym przypadku chodziłoby o wczytanie jednej struktury. A to "wszystkie" to z rozpędu.
//
Ale w przypadku, gdy jest ogromna ilość struktur, a struktura do usunięcia znajduje się na początku to nic nie da. Więc dobrym pomysłem jest dodanie do struktury pola, które oznacza, czy struktura jest usunięta, czy nie. A nowe struktury zapisywać na te usunięte lub na koniec pliku (jak nie ma usuniętych). Problem, będzie tylko gdy będziemy dużo usuwać, a mało dodawać (rozmiar pliku) lub będzie ważna kolejność struktur.
//
stan24: W sposobie, który przedstawiłeś ostania struktura zostanie "zdublowana".
Użytkownik Ku.ririn edytował ten post 07 styczeń 2007, 11:26
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •