Zdravím ...
Chtel bych se zeptat jak fungujou unpackery/packery protoze rad bych si chtel nakej jednoduchej napsat ale problem je v tom ze vubec nevim jak :-( jestli nevite jak to funguje jestli by jste mi to nekdo nemohl napsat ci poslat nakej jednoduchej kod jak to funguje tak bych byl docela vdecny ... (Jde mi o Unpacker/Packer jak do 1 neznamyho souboru zapise treba 10 dalsich souboru a nebudou se dat nijak prohlizet pouzivat apod .. Jenom pres ten Unpacker) Dekuji moc za nejaky rady ...
Fórum › .NET
Jednoduchy Unpacker/Packer
A umíš načíst obsah těch souborů a spojit ho za sebe, respektive za nějakou hlavičku o těch souborech(s určitým formátem kde bude jmeno,velikost každýho souboru, + jejich pošet). Jde ti o kompresi? Pak existuje třeba LZ77, Huffmanovo kódování. V opačnym případě ten jejich vastní obsah můžeš prostě jen přelít nějakými "náhodnými" čísly.
No prave ja vubec nevim jak to udelat takze ani nevim co to obnasi ... No je mi jedno jakou kompresi bych to pakoval do nakyho souboru to by se vytvorilo hlavne jde o to aby to neslo otevrit nijak jinak nez pres ten unpacker ... vlastne jde mi presne o to co jsi psal neboli
Vypis Souboru co jsou v tom souboru zapakovany
Kolik jich tam je
A pak to hlavni pridat do souboru a pak zase vyndat
a aby to neslo jinak otevrit nez pres Program
napíšeš kde konkrétně ses zasek v kódu(snad ne na 1. řádku...)? Nebo očekáváš od kolemjdoucích i vypsat funkce pro načtení binárního souboru do bufferu? Práci s bufferem pak snad zvládneš, formát zápisu je k diskuzi...
Jinak to plánuješ s UI a registrovanou vlastní příponou souboru nebo ti de jen o volání skrz funkci (knihovna-dll), pak to je na pár chvil..
Reknu to takhle Ano jeste sem nezacal protoze nevim jak zacit praci s bufferem sice neumim tolik ale to se da jeste napravit ... Jinak Chtel bych vlastni priponu ... Jak uz sem psal jde mi jen o par veci -> Pridavat , Vyextrahovat , A zapisovani vic souboru do 1
Edit : To pridavani a vyextrahovani bych rad po 1 souboru ci vic ale to se da "casem" pridat tedka jenom ty zakladni veci
sem si nasel tvuj dotaz na nejaky XML veci. Takze asi nehovoris pro .net v reci Borland C++ VCL jako ja. Ja bych udelal se soubory treba 10x open() read() v cyklu a pak lepeni hlavicky a zapis + close. Neni C# o :smile10: ?? :D
Takze sem si nejak rozmyslel co a jak a zacal jsme pracovat ... Lepe receno udelal jsem to zakladni a tedka mam problem ....
Jak nactu soubor do Bufferu
Jak ho z Bufferu predam do Myho souboru
Jak ten urcitej soubor Poznam jak oddelit od ostatnich
ohledne souboru - zapracuj s datovym objektem Stream, jeho metodou read, najdi v Helpu FileStream nebo co ja vim.
Mas nejaky potom nejspis i dalsi Array.Copy pro manipulaci pri kopirovani bufferu.
Sestaveni vyslednyho souboru si predstav jako jak jsem psal hlavicka tu seskladas napriklad:
1.polozka - pocet souboru - velikost Long
2.polozka - Xkrat(podle poctu souboru) neboli pole Long velikosti
3.polozka - pole Stringu se jmeny ovsem musis to kopirovat a orezavat na nejakou konstatni velikost
treba 300 bytes
4.polozka - samotna data
potom pri 5 souborech mas prvni ukladany soubor se svymi daty na 1*4+5*4+300*5=1524 B
no a tam to zapises (pokud by mel soubor moc zapises postupne po castech - nejaky write)
dalsi soubor je na adrese 1524+delka prvniho souboru , tu znas z Polozky c.2
Klidne si to namaluj..
To illioner :
Pani kdyby si todle napsal hnedka na zacatku tak jak blazen neschanim na netu naky informace ktery me zabraly hodiny hledani :-D Jinak to rozaznani nechapu jak udelat protoze kdyz prece zapisu ten muj soubor do toho a pridam k nemu neco tak pak ve vysledku kdyz bych to chtel zobrazit tak to nepujde protoze bude mit uplne jinak stavenou hex soustavu (myslim tim ze tam rpidam jmeno) Jinak ptal jsem nactu soubor do bufferu ... Dik
.. no ano kde je jenom to dokonale borgske sdileni vedomi/vedomosti :-)
O cem to pises? Ty mas tyhle 2 moznosti zapisu:
1. bud String prevedeny pomoci/pres tochararray zapises do Streamu metodou Write tak uplne stejne jako predchozi Longy, Pole, atd.
Neboli kazdou polozku das rovnou Write do Streamu, zadny problem nenastane (jenom prebrodit pretypovani)
2. vsechno budes davat do char* pole, pomoci toho arraycopy (nebo jestli umis pracovat primo s ukazateli tak i bez) a posunujes se pres nejaky ukazatel. Kod je unsafe.
Promenna cele char* Pole; najednou zapises do toho 1 pakovaneho souboru naraz..
(nebo misto char* Pole; stvoris byte[] Pole; a nejaky to pretypovani)
uz to mas mit davno 100x hotovy
No pisu o tom ze kdyz si prevedu 1 soubor + zapisu do nej nazev nebo neco takovyho tak je pak problem v tom ze kdybych ho otevrel v tom mym souboru tim urcitym programem co bych otviral treba fotky tak uz me to nepujde protoze tam bude uz pripsana hodnota "nazvu"
blbost, kdo tady pise ze ti bude stacit otevrit soubor, musis ho vytvori z tech dat na ty pozici co si vypocitas.
Pri Unpack funkci prijmes jako parametr cislo (index), z toho cisla si spocitas pozici dat souboru a jeho jmeno. Data nactes (seek,read), jmeno nactes(seek,read).
Read ti to da do nejakyho char[] pole a z toho neni problem vytvorit String, resp. to osekane misto na pozici 1524+index*velikost_predchozich_souboru a zbytek kopirovat do Nove tvoreneho originalniho (puvodniho) souboru. Pripadne predas jako result ty funkce jen ta orezana data, kdyz se ti nelibi vytvaret soubor na Disk. No a mas Buffer s daty te fotky.
hele uz jsem si pred lety spousty takovejch blbosti naprogramoval a nikdy problem nebyl :DD
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
Podobná vlákna
Jednoduchy for — založil Durza
Jednoduchý zásobník — založil kadet
Jednoduchý košík — založil mich
Jednoduchý shoutbox — založil takinoo
Moderátoři diskuze