Zwiekszanie rozmiaru pliku.

0

Witam. Nie chodzi mi dokladnie o samo zwiekszanie rozmiaru pliku ale o zwikeszenie bez nadpisywania go. Jest to prosta sprawa gdy dodaje nowe dane na koniec pliku, ale gdy robie to na poczatku plik zostaje nadpisany od nowa. Moze zna ktos sposob jak to zrobic bo mi sie nasuwa tylko odpowiedz o zmianie struktury piku na dysku (modyfikacja tablicy plikow czy jakos tak :-| ). Nawet jesli ktos nie jest zbytnio wtajemniczony bede wdzieczny jak ktos wie gdzie moge znlalesc jakiegos tutka badz inne informacje. Dzieki.

0

Powodzenia podczas modyfikacji partycji NTFS. Nałatwiej odczytać wszystko z pliku do jakiegoś bufora, zapisać nowe dane po czym zapisać bufor. W przypadku b. dużych plików, aby nie alokować GB pamięci można zastosować drugi plik tymczasowy: Tworzysz plik, zapisujesz dane, kopiujesz dane z pliku źródłowego do tymczasowego, usuwasz plik źródłowy i zmieniasz nazwę tymczasowego na źródłowy.

0

a jednak bede musial chyba jakies modysikacje na partycjach zrobic. Moge sobie wyobrazic skutki zlego konfigurowania partycji ale jednak chce poznania jest wieksza :D. Masz moze jakies odnisnika gdzie moge otrzyamc jakies infromacje jak to zrobic.

0

tworzysz nowy plik, na początek dajesz to co chcesz i dalej przepisujesz ze starego i na końcu podmieniasz stary na nowy. Innej możliwości nie ma

0

na 100% jest inna mozliwosc i to moze byc tylko modyfikacja partycji NTFS

0
sasio napisał(a)

na 100% jest inna mozliwosc i to moze byc tylko modyfikacja partycji NTFS

Uparty jesteś. Propozycja moja i MiskaD to jakieś 20-30 wierszy kodu. Twój upór modyfikacji partycji to mozolne poszukiwanie DTR odnośnie NTFS, obchodzenie zabezpieczeń systemu operacyjnego (z tego co wiem, winda skutecznie zabrania dostępu do partycji). Mi nie pozostało nic jak: "powodzenia".

0
Oleksy_Adam napisał(a)

Mi nie pozostało nic jak: "powodzenia".

dołączam się [rotfl]

0

lol wiem ze to zajmie mi z 20 lini kodu ale modyfikacja plikow ponad 1GB mija sie z celem gdy chce dodac kikla kilobajtow :/. Znacie moze pragram Steam (dystrubucja gier itd.) Ten program robi aktualizacje plikow GCF (spakowane dane gry). I jak to bywa caly Header jest na poczatku, wszystkie informacje itd. Wiec jesli sa nowe pliku do aktualizacji on musi dodac dane na poczatek. Niewiem moze on omija zabespieczenia i modyfikuje partycje ale sam niewiem. Ale moze zwatpie jak ktos mi da linka do jakies tutaka :D.

Taki offtopic co do tego tematu by nie robic kolejnego. Jak sprawdzic ile jest zaalokowanej pamieci w wskaznika?

0

Ale zastanów sie czy aby na pewno istnieje konieczność wstawiania danych do pliku gdzies na jego początku. Owszem jeżeli jest to jakiś format pliku który twój program obsługuje to nie masz za bardzo wyjścia, ale gdy piszesz program i tworzysz właśny format pliku(niewiem choćiażby jakaś mała baza danych) to jednakstaraj się zaprojektować tak mechanizmy operujące na tym pliku by nie było konieczności przepisania zawartości całego pliku bo w offsecie $000000ff musiałeś wstawić jednego bajta.

PS.
Operacje związane z rekonfiguracją partycji:
1: Dosć trudne zwłaszcza że Microsoft nie udostępnia żadnych info na temat partycji NTFS
2: Nawet jeżeli powiodą ci sie operacje na drzewach MTF i nie zniszczesz całej chierarchi to i tak musisz zebrać bardzo dużo informacji o wolnych jednostkach itd. itd. Oczywiście należy pamiętać o tym że NTFS ma także dziennik który ewentualnie po uwari pozwala odzyskać dane ale po operacjach na partycji może nie być to sposób wystrczający. No i ostatni problem z tej kategorii to kaszowanie systemowe.
3: należy pamiętać że pliku na partycjach są składane z kawałków w przypadku NTFS'a kawałek domyślnie ma rozmiar 4kb. Czyli jeżeli uporasz się z powyrzszymi problemami to tu jest następny który powinien cie zniechęcić. Bo tak czy tak wstawienie jakis danych do pliku będzie sie wiązać z przepisaniem zawartośc całego pliku jeżeli ma sie nie marnować miejsce na dysku i plik ma nie miec pustych dziur. Owszem było by to uzasadnione gdybys za każdym razem dodawał np 4kb gdy podstawowa część alokacji na dysku była równa 4kb wtedy byłby jakis zysk!
4: A i oczywiście fakt że twoja aplikacja będzie nie tylko zalezna od OS'a ale także od typu partycji na jakiej on stoi.

Jak dla mnie zastanów sie jeszcze dwa razy zanim zaczniesz robić coś konkretnego. Napisz do czego to ci jest potrzebne zawsze znajdzie sie ktoś z świeżym spojrzeniem na sprawę.

Pozdrawiam

0

na pewno jest konieczne wstawianie danych na poczatek pliku. Co gorsza nie jest wlasnie to moj format pliku stad wlasnie jestem zmuszony (przez samego sibie wlasciwie) do dodania danych na poczatek bez ponowanego przespisywania calego pliku. Zreszta mozecie zobaczyc definicje tego formatu jaki http://www.wunderboy.org/docs/gcfformat.php. Jest to tak jakby wirtualna partycja. Format ten skada sie z samych 4kb wortosci. Sam <ort>niewiem </ort>dlatego pytam bo naprawde <ort>niemam </ort>pojecia czy sa innego sposoby itd. Program Steam firmay Valve (tworcy formatu) poradzil sobie z tym jakos (choc wiem ze to firma a nie jakis laik jak ja ktory chce uporac sie z tym problemem :D). Dzieki za male rozswietlenie sprawy :).

0

Z tego co <ort>zauwarzyłem </ort>to chodzi o format gcf i gre HL2. Hm Należy pamiętać że ten opis nie pochodzi od twórcy formatu tylko od osób które go rozgryzły. Ale wiadomo na pewno ze mamy do czynienia z Virtualnym systemem plików. To zmienia całkowicie postać rzeczy <ort>poniewarz </ort>dzięki temu mamy swobodny dostep do danych i plik w tym VSP nie musi być ciągły może być pofragmentowany.

Dajmy przykład
mamy cos takiego(każda literka oznacza jakąś część pliku):
aaaabbbbcccccdddddeeeefff
teraz chcemy zamienić plik B na większy: bbbbb
aaaabbbbcccccdddddeeeefffb
dzięki temu że mamy do czynienia z blokami które nie muszą być po kolei możemy zapisać w nowy plik na starym miejscu ile sie zmieści i na koncu dodać blok który który będzie zawierać dalszą część pliku.

Z twojego wcześniejszego opisu wynikało że nie mamy do czynienia z konkretnym rozwiązaniem więc można było sobie dość luźno dywagować ale teraz sytuacja uległa rozjasnieniu i możesz być spokojny. Na temat tego formatu pewnie niewiele jest na necie i tylko w języku angielskim, tak dla wtajemniczenia proponuje poczytać o virtualnych systemach plików, na pewno taka wiedza pomoże w pisaniu kodu. Możesz poszukać implementacji plików pak z quake2 dla delphi może da się tym przyspieszyc prace.

0

Wiem ze ten atrykul nie jest od tworcow formatu GCF. Angieslki znam na tyle dobrze ze <ort>niemam </ort>problem wiec angieslki czy polski to mi obojetne. Wiem z czym sie je fragmenty i bloki. Juz napislem kod w Delphi ktory potfrafi rozpoakowywac pliki z pliku GCF itd. (jak GCFScape). <ort>Ogulnie </ort>ten format jest mniej wiecej w 90% rozszyfrowany ale raczej to nie zmienia faktu ze header pliku sie zmienia gdy sa dodawane nowe pliki, bloki badz frgamenty. Wszystko w w headerze i jest on na poczatku. Poczytam jeszcze o VSP ale nie wydaje mi sie by to moglo jakos rozwiac moj problem.

0

Ok ale to i tak nie zmienia faktu że zaraz za nagłówkiem pliku jest jakiś blok i w teori nic nie stoi na przeszkodzie by go przenieś na sam koniec pliku, zyskamy wtedy miejsce na rozbudowanie nagłówka, bez potrzeby przepisania zawatości całego pliku.

Pozdrawiam

0

Blok jak najbardziej moge przeniesc badz dodac ale infrmacje o jego polaozeniu musze zapisac w naglowka ktory jest na pocztaku i zmula.

0

No niestety aktualizowania nagłówków w tym pliku nie przeskoczysz więc nie ma co narzekać tylko się wziąć do roboty.

Pozdrawiam

0

Ja wlasnie chce sie wziasc do roboty ale niewiem od czego zaczac. (A konkretnie o jaka robote ci chodzi bo plik GCF to nieproblem ale aktualizowanie jego naglowka bez ponownego przepisywania pliku to jest problem)

0

Pisząc 'wziąć się do roboty' miałem na myśli rozwiązanie problemu który cie trawi. Nikt za ciebie nie napisze kodu, a informacje na temat formatu masz, jakieś sugestie z mojej strony i to już powinno motywować do działania.

0

No ale oto chodzi ze mam motywacje mam wszystko zrobione procz tego ze niemoge dodac zadnych danych na poczatek pliku bez ponownego kopiowania go. Format pliku tutaj na razie NIE MA znaczenia bo z pisaniem nowego naglowka NIE MA problemow. Chyba jednak trace motywacje :(.

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