[Delphi] Problem z plikami :)

0

Mam taki sobie problemik -- potrzebuję upchnąć kilka plików do TMemoryStream. W osobnej tablicy zapisana jest nazwa pliku, rozmiar i offset w Stream'ie. I teraz właściwy problem -- chcę usunąć jakiś plik (czyli określony zakres danych) z TMemoryStream, ale tak, by dane które są dalej (po tym usuniętym zakresie) przesunęły się na to zwolnione miejsce...

Ewentualnie może ktoś ma jakiś pomysł jak inaczej to rozwiązać?
Maksymalnie wszystkie pliki mogą zajmować (aktualnie) 120 kB wraz z nagłówkami (w nagłówku 12-znakowa nazwa pliku i jego rozmiar (dword)). Dodatkowo utworzona tak struktura (z plikami) ma być łatwa do podzielenia na bloki po 20 kB każdy :)

Pozdrawiam wszystkich i witam po przerwie -- trochę się tu zmieniło :)

0

Coś dziwnie czuję, że chyba nikt mi tu nie pomoże :( A tacy z Was "programmers"... :-D

0

<font color="green">Mam taki sobie problemik -- potrzebuję upchnąć kilka plików do TMemoryStream. W osobnej tablicy zapisana jest nazwa pliku, rozmiar i offset w Stream'ie. I teraz właściwy problem -- chcę usunąć jakiś plik (czyli określony zakres danych) z TMemoryStream, ale tak, by dane które są dalej (po tym usuniętym zakresie) przesunęły się na to zwolnione miejsce...

Ewentualnie może ktoś ma jakiś pomysł jak inaczej to rozwiązać?
Maksymalnie wszystkie pliki mogą zajmować (aktualnie) 120 kB wraz z nagłówkami (w nagłówku 12-znakowa nazwa pliku i jego rozmiar (dword)). Dodatkowo utworzona tak struktura (z plikami) ma być łatwa do podzielenia na bloki po 20 kB każdy

Pozdrawiam wszystkich i witam po przerwie -- trochę się tu zmieniło

</span>

dobra chentnie pomoge ci kiedys za jakies 2 lata bo dopiero ucze sie byc programistom to dozobaczenia za 2 lata a wy programisci
pomoglibyscie koledze w PROBLEMIA
a nie <font color="darkblue">stali jak XXXXXX pod latarniom[krzyk] [krzyk]

</span>
0

Coś dziwnie czuję, że chyba nikt mi tu nie pomoże :( A tacy z Was "programmers"... :-D

Wyluzuj sie, nie kazdy tu zaglada co 10 min. Nie kazdy ma zawsze czas myslec nad cudzymi (jednak) problemami (np. ja w tej chwili, co nie znaczy, ze bym umial to zrobic). Uzbroj sie w nieco cierpliwosci. Jak znam zycie, pomoze Ci Dryobates, on lubi Streamy.

Brzydka metoda, ale chyba wystarczajaco efektywna dla takich malych ilosci danych, to po prostu przepisanie calego streamu w nowy stream pomijajac "kasowany" plik i update tablicy. Wyjasnij tez moze o co Ci chodzi z tym podzialem na bloki, bo ja nie rozumiem.

0

Jezeli chcesz wyciagnac jeden plik z tego strumienia i znacz rozmiar to sprawa wyglada dosc prosto. Najpierw wyciagasz ten plik, ktory chcesz wyciagnac (w twoim przypadku - plik numer 1):

M2.Copy(M1, 0, 100); // 100 jest rozmiarem danych

Teraz tworzysz nowy strumien, ktory zastapi ten stary i takze kopiujesz do niego dane.

M3.Copy(M1, 100, M1.Size); // od pozycji 100 do konca strumienia

Teraz zastepujesz strumien M1, strumieniem M3.... Hm... czy jasno sie wyrazam? :-/

0

Przedstawię to tak:

AAAAAAbbbbCCCCxxx

gdzie
A - plik 1
b - plik 2
C - plik 3
x - wolne miejsce w streamie (który ma rozmiar 120 kB)

i teraz chcę usunąć plik "b" tak, by pozostało coś takiego:

AAAAAACCCCxxxxxxx

Rozumiecie? :)

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