SDL – C / C++ – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

SDL – C / C++ – Fórum – Programujte.comSDL – C / C++ – Fórum – Programujte.com

 

survik1
~ Moderátor
0
Posthunter
22. 8. 2007   #1
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
Život je jen hra, která se nedá vyhrát.
k
~ Anonymní uživatel
144 příspěvků
22. 8. 2007   #2
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
sn3d0
Věrný člen
22. 8. 2007   #3
-
0
-

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

Nahlásit jako SPAM
IP: ...–
shutdown -h now
Jura
~ Anonymní uživatel
637 příspěvků
23. 8. 2007   #4
-
0
-

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.

Nahlásit jako SPAM
IP: ...–
survik1
~ Moderátor
0
Posthunter
23. 8. 2007   #5
-
0
-

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 =(

Nahlásit jako SPAM
IP: ...–
Život je jen hra, která se nedá vyhrát.
sn3d0
Věrný člen
23. 8. 2007   #6
-
0
-
Nahlásit jako SPAM
IP: ...–
shutdown -h now
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 13 hostů

Podobná vlákna

[SDL] Help — založil WraCkeR

Sdl c — založil marc_ramin

SDL — založil Miro1701

SDL — založil survik1

SDL podruhé — založil vollf82

Moderátoři diskuze

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý