[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

pl.comp.programming

Usuwanie danych z pliku

AdamW

5/22/2007 5:30:00 PM

Witam,

mam pytanie zupelnie teoretycznie i niezwiazane z rzadnym konkretnym
jezykiem programowania. Jak usunac dane z pliku? I nie chodzi mi o
metode wczytania najpierw tych danych z pliku których nie chce usuwac,
zapisania ich do pliku, potem wczytania tych które chce usunac i nie
zapisania ich i potem wczytania tych które chce zachowac i zapisania
ich tez. Jest jakas funkcja dedykowana do tego? Bo ta wyzej
(powszechnie stosowana zreszta) metoda wydaje mi sie strasznie
tandetna, cos lepszego by mi sie przydalo.

Pozdrawiam,
AW

9 Answers

Tomasz bla Fortuna

5/22/2007 5:47:00 PM

0

Dnia 22 May 2007 10:30:08 -0700
AdamW <adam.wieckowski@gmail.com> napisal(a):

> Witam,
>
> mam pytanie zupelnie teoretycznie i niezwiazane z rzadnym konkretnym
> jezykiem programowania. Jak usunac dane z pliku? I nie chodzi mi o
> metode wczytania najpierw tych danych z pliku których nie chce usuwac,
> zapisania ich do pliku, potem wczytania tych które chce usunac i nie
> zapisania ich i potem wczytania tych które chce zachowac i zapisania
> ich tez. Jest jakas funkcja dedykowana do tego? Bo ta wyzej
> (powszechnie stosowana zreszta) metoda wydaje mi sie strasznie
> tandetna, cos lepszego by mi sie przydalo.
Tzn. rozumiem, ze wiesz jak wyglada zapis danych na dysku? Ciagle dane,
bajt po bajcie. "Usuniecie" jednego wymaga przesuniecia wszystkich za
nimi.

Nawet jesli znajdziesz funkcje, to ona bedzie dzialala dokladnie tak
samo. Mozliwe, ze jakies dedykowane systemy plików beda umozliwialy
dosc szybkie wykonanie takiej operacji ale nie jest to jakies codzienne.

Mozesz tak zaprojektowac format w pliku, ze dane oznaczasz jako
"usuniete", a potem w trakcie jakis dalszych przeksztalcen zapiszesz
ten kawalek pliku innymi danymi. Maly filesystem w jednym pliku.

Mozna tez niby skakac po pliku... wycinajac kawalek ze srodka
zapisujesz go danymi, które znajduja sie np. 10 bajtów w przód. Ale
musisz skoczyc naprzód, odczytac, wrócic, zapisac i tak dalej az
dojedziesz do konca pliku. Poza tym jesli w tej operacji przeszkodzi Ci
brak pradu - dane ida sie pasc (jezeli w ogóle byly flushniete na dysk
przez warstwe systemu plików).

Podsumowujac: Nie ma automagicznej metody. (A przynajmniej bardzo sie
zdziwie jak ktos jakas znajdzie. ;d)

> Pozdrawiam,
> AW
>


--
Tomasz bla Fortuna
jid: bla(at)af.gliwice.pl
pgp: 0x90746E79 @ pgp.mit.edu

Krzysztof Jamróz

5/22/2007 6:12:00 PM

0

Dnia 22 May 2007 10:30:08 -0700, AdamW napisa3(a):

> mam pytanie zupe3nie teoretycznie i niezwi?zane z rzadnym konkretnym
> jezykiem programowania. Jak usun?a dane z pliku? I nie chodzi mi o
> metode wczytania najpierw tych danych z pliku których nie chce usuwaa,
> zapisania ich do pliku, potem wczytania tych które chce usun?a i nie
> zapisania ich i potem wczytania tych które chce zachowaa i zapisania
> ich te?. Jest jaka? funkcja dedykowana do tego? Bo ta wy?ej
> (powszechnie stosowana zreszt?) metoda wydaje mi sie strasznie
> tandetna, co? lepszego by mi sie przyda3o.

Je?li bardzo chcesz miea nietandetn?, to sobie sam zrób system plików w
pliku.

Nie spotka3em sie w systemach operacyjnych z funkcj? "usun fragment pliku".
Teoretycznie bez przepisywania danych da3oby sie to zrobia w ogólnym
przypadku z dok3adno?ci? do sektora/klastra (najmniejszej jednostki
alokacji, jak? obs3uguje system plików), przez wyrzucenie pojedynczego
klastra z listy klastrów pliku. Przydatno?a takiego rozwi?zania by3aby
niewielka, wiec pewnie nikt sie w to nie bawi.

TSD, czy usuwanie danych ze ?rodku pliku (nie bed?cego prymitywn? baz?
danych) pojawia sie w zastosowaniach czesto, czy jest to tylko temat zadan
z programowania dla studentów?

--
Krzysztof Jamróz

Marcin 'Qrczak' Kowalczyk

5/22/2007 6:19:00 PM

0

Dnia 22-05-2007, Wt o godzinie 10:30 -0700, AdamW napisal(a):

> Bo ta wyzej
> (powszechnie stosowana zreszta) metoda wydaje mi sie strasznie
> tandetna, cos lepszego by mi sie przydalo.

Czesto stosowane (np. w programach pocztowych) jest oznaczanie danych
jako "skasowane" i pomijanie ich przez typowe operacje. Raz na jakis
czas dane sa przepisywane na nowo, juz bez dziur.

--
__("< Marcin Kowalczyk
\__/ qrczak@knm.org.pl
^^ http://qrnik.knm.org.p...

Jacek Czerwinski

5/22/2007 6:27:00 PM

0

Dnia 22 May 2007 10:30:08 -0700, AdamW napisa3(a):

> Witam,
>
> mam pytanie zupe3nie teoretycznie i niezwi?zane z rzadnym konkretnym
> jezykiem programowania. Jak usun?a dane z pliku? I nie chodzi mi o
> metode wczytania najpierw tych danych z pliku których nie chce usuwaa,
> zapisania ich do pliku, potem wczytania tych które chce usun?a i nie
> zapisania ich i potem wczytania tych które chce zachowaa i zapisania
> ich te?. Jest jaka? funkcja dedykowana do tego? Bo ta wy?ej
> (powszechnie stosowana zreszt?) metoda wydaje mi sie strasznie
> tandetna, co? lepszego by mi sie przyda3o.

na przyk3ad rasowi "BCB programersi" szukaj? odpowiedniego do tego celu
komponentu.

Jakub Debski

5/22/2007 7:46:00 PM

0

> Witam,
>
> Jest jaka? funkcja dedykowana do tego? Bo ta wy?ej
> (powszechnie stosowana zreszt?) metoda wydaje mi sie strasznie
> tandetna, co? lepszego by mi sie przyda3o.

Nie ma, wiekszo?a wspó3cze?nie u?ywanych systemów plików tego nie
wspiera. Bardzo skomplikowa3oby to system plików (np. usuwanie nie
wyrównanych do jednostki alokacji obszarów danych), a potrzeba usuwania
danych ze ?rodka nie jest czesta.

pozdrawiam
Jakub


AdamW

5/22/2007 10:57:00 PM

0

On May 22, 8:27 pm, Jacek Czerwinski <x...@y.z.pl> wrote:
> Dnia 22 May 2007 10:30:08 -0700, AdamW napisal(a):
>
> > Witam,
>
> > mam pytanie zupelnie teoretycznie i niezwiazane z rzadnym konkretnym
> > jezykiem programowania. Jak usunac dane z pliku? I nie chodzi mi o
> > metode wczytania najpierw tych danych z pliku których nie chce usuwac,
> > zapisania ich do pliku, potem wczytania tych które chce usunac i nie
> > zapisania ich i potem wczytania tych które chce zachowac i zapisania
> > ich tez. Jest jakas funkcja dedykowana do tego? Bo ta wyzej
> > (powszechnie stosowana zreszta) metoda wydaje mi sie strasznie
> > tandetna, cos lepszego by mi sie przydalo.
>
> na przyklad rasowi "BCB programersi" szukaja odpowiedniego do tego celu
> komponentu.

Nie chodzi tylko zapis danych na dysku. W sumie sie zgadzam, ze przy
zapisie bajt po bajcie nie ma innej mozliwosci jak przesunac dane pare
bajtów do tylu (czyli nadpisac). Inna sprawa to jest np. pamiec.
Teoretycznie aby z pamieci korzystac w miare rozsadnie musialbym
stworzyc plik tymczasowy i do niego pisac, potem usunac plik zródlowy
i zmienic nazwe pliku tymczasowego na stary plik zródlowy... A funkcji
jakies (systemowej - wrappery w postaci biblioteki to moge sobie sam
napisac, nie o to mi chodzi) na nadpisywanie jakes czesci pliku nie
ma? (oczywiscie ta sama iloscia danych).

Pozdrawiam
AW

Zbyszek Malec

5/23/2007 12:54:00 AM

0

Dnia 22 May 2007 15:57:17 -0700, AdamW napisa3(a):

> A funkcji
> jakie? (systemowej - wrappery w postaci biblioteki to moge sobie sam
> napisaa, nie o to mi chodzi) na nadpisywanie jake? cze?ci pliku nie
> ma? (oczywi?cie t? sam? ilo?ci? danych).

Jak chcesz tylko nadpisywaa x bajtów x batjami to problemu nie ma w ogóle.
Tak w3a?nie dzia3a "zwyk3e" zapisywanie do pliku. Je?eli ustawisz sie w
?rodku pliku i bedziesz co? w nim pisa3, to nadpiszesz to co by3o tam
wcze?niej. Jak dojedziesz do konca, to plik sie odpowiednio powiekszy.

--
Zbyszek Malec Ustronie 104
jid: zbyszanna@jid.pl

AdamW

5/23/2007 8:23:00 AM

0

On May 23, 2:54 am, Zbyszek Malec <zbysza...@tlen.pl> wrote:
> Dnia 22 May 2007 15:57:17 -0700, AdamW napisal(a):
>
> > A funkcji
> > jakies (systemowej - wrappery w postaci biblioteki to moge sobie sam
> > napisac, nie o to mi chodzi) na nadpisywanie jakes czesci pliku nie
> > ma? (oczywiscie ta sama iloscia danych).
>
> Jak chcesz tylko nadpisywac x bajtów x batjami to problemu nie ma w ogóle.
> Tak wlasnie dziala "zwykle" zapisywanie do pliku. Jezeli ustawisz sie w
> srodku pliku i bedziesz cos w nim pisal, to nadpiszesz to co bylo tam
> wczesniej. Jak dojedziesz do konca, to plik sie odpowiednio powiekszy.
>
> --
> Zbyszek Malec Ustronie 104
> jid: zbysza...@jid.pl

No ja wlasnie nie chce, zeby sie powiekszal! Chce AAAACCC zamienic na
AABBBCC. Choc w sumie to pewnie zalatwi za mnie systemowy Cache... No
cóz, widze wszkaze, ze innej metody nie ma.
Dzieki za odpowiedzi.

Jakub Debski

5/23/2007 8:34:00 AM

0

AdamW brought next idea :
> No ja w3a?nie nie chce, ?eby sie powieksza3! Chce AAAACCC zamienia na
> AABBBCC. Choa w sumie to pewnie za3atwi za mnie systemowy Cache... No
> có?, widze wszka?e, ?e innej metody nie ma.
> Dzieki za odpowiedzi.

znaczy nie chcesz usuwaa danych z pliku, ale zast?pia je (t? sam?
ilo?ci? innych danych)?
Z tym nie ma problemu, a jak to zrobia zwi?zane jest ju? z konkretn?
platform? lub jezykiem programowania.

pozdrawiam
Jakub