Fajn, už jsem otravnej, já vím :D Ale jinak než dotazy to prostě nepůjde :(
Dnes se to týka zabalování. Nemyslím balení kufrů před naštvanou podvedenou manželkou.
Mám několik souborů a potřeboval bych, aby se všechny zabalily do jednoho souboru, prostě neco.abc. Je to kvůli tomu, abych nemusel posílat deset tisíc souborů a k tomu, že když už někomu mám něco "dát", ať si dá taky práci to rozbalit.
Zkrátka, nevíte o nějakém nejlépe článku, kde se rozebírá tato problematika? Popř. knihovny, které neotvírá nějaký zatracený rar či zip? Děkuji.
Fórum › C / C++
SDL
SDL nieco podobne pokial viem nedokaze, mohol by si to spravit tak ze by si fork-ol proces a pustil tar (ak si pod Linuxom),
alebo tiez si urobit vlastny fileformat, niekde na zaciatok vlozit pocet a velkosti suborov + hocico ine a dalej vsetky subory nakopirovat do tohoto noveho, pravdepodobne binarne.
to Survik: no ak ti ide len o nieco ako ztarovanie bez kompresie tak na to je easy sposob ktory mas rychlo zmaknuty. Na zaciatku suboru proste budes mat tabulku ze ktory file je na ktorom offsete a ako je dlhy. NIeco ako vlastny filesystem.
Idea suboru:
HEADER:
02 00 00 00 - pocet zaznamov v hlavicke ako 32 bit unsigned int (momentalne 2)
10 ... 00 - meno 1 suboru o dlzke 255 znakov
12 02 00 00 - start offset tiez 32 bit unsigned int (v tomto pripade tesne za header cize 530 bajtov)
00 00 00 05 - size v tomto priapde 5 bajtov
10 ... 00 - meno 2 suboru o dlzke 255 znakov
17 02 00 00 - start offset tiez 32 bit unsigned int (v tomto pripade tesne za header cize 535 bajtov, kedze 5 bajtov ma predchadzajuci subor)
00 00 00 03 - size 3 bajtov
BODY:
AF CD FF 87 7A - obsah prveho suboru 5 bajtov
9E 00 D3 - obsah druheho suboru 3 bajty
dolezita struktura:
typedef struct {
char name[255];
unsigned int start_offset;
unsigned int size;
} file_item;
Ulozenie:
-zoberies si vsetky files ktore chces vlastne zabalit.
-zistis ich velkosti a naplnis kazdemu file_item polozku size.
-potom si vypocitas velkost vsetkych file_item + 4 bajty na pocet itemov. DOstanes velkost headra. Z toho si nasledne vypocitas startovacie offsety suborov. pocet file_itemov a samotne file_itemy zapises na zaciatok tvojho suboru.
- Za ne budes potom v tom istom poradi zapisovat obsahy jednotlivych suborov.
Teraz nacitanie:
Otvorit subor cez fopen() nacitas si pre 4 bajty ako int:
unsigned int items_count;
fread(f, &items_count, sizeof(unsigned int));
dalej vlastne nacitas jednotlive file_item-y
file_item items[2];
for(int i = 0; i < items_count; i++) {
fread(f, items[i].name, 255);
fread(f, &items[i].start_offset, sizeof(unsigned int));
fread(f, &items[i].size, sizeof(unsigned int));
}
cize teraz mas vsetko to co potrebujes aby si mohol rozbit jeden vleky subor na mensie..
Inac nieco na ten styl :http://wiki.ceske-hry.cz/Hern%C3%AD_n%C3%A1vrhov%C3%BD_vzor_Datov%C3%A9_soubory_v_bal%C3%ADku
No napisal som to ako uplny vol ale snad idea je jasna :) za pripadne nepresnosti sa ospravedlnujem napisal som to s tym ze som uz chcel ist spat ;-) Inac rano pozriem v praci , myslim ze na toto uz mam aj classes nejake, ale niesom si isty
No, pěkný příklad, možná by to chtělo ještě si jako prvni uložit BOM(třeba char -"1" pro Little indiánka a "0" pro big, pro rejpaly:v uvozovkách je vyznačená hodnota, ne znak nebo řetězec)a pak už vesele řádit s tím souborem.
To sn3d: Prosím tě, můžeš mi vysvětlit tu tvoji tabulku? Pochopil bych to třeba jako 32 4 255 - bitová hodnota, obsah 4 bity, jméno souboru. Ten tvůj systém však nemůžu nějak rozchodit =(
no skus si pozriet tuto temu :http://programujte.com/forum.php?akce=prispevek&id=5869#47508
Přidej příspěvek
Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku
×Vložení zdrojáku
×Vložení obrázku
×Vložení videa
Uživatelé prohlížející si toto vlákno
Moderátoři diskuze