Newsgroup: it.comp.lang.c++
Titolo: 100 (e 1) domande sui binari.....

Allora, ho un problema abbastanza semplice che non ho idea di come cacchiolo
risolverlo.
Devo creare un file binario, che contenga dati a me di tipo sconosciuto (in
pratica li devo buttare dentro da altri binari) e quindi non ne conosco
nemmeno la dimensione. Ma concentriamoci sul file, io ovviamente devo sapere
l'inizio di uno e la sua fine, il problema è come staccare virtualmente
questi pezzi che sono contenuti nello stesso file. Avevo pensato di mettere
prima dell'inizio la sua dimensione così potevo esattamente sapere la fine,
ma per quello che ne sò, la loro dimensione potrebbe essere anche di un sono
byte, e dato che la grandezza di questo archivio è un fattore
_determinante_, vorreti evitare di metterlo. Non esiste chessoio, un
carattere che nei binari (anche eseguibili) non viene MAI utilizzato, un
distanziatore o riba simile al '\0'??
Chiunque sappia darmi un'idea migliore sarà osannato :)
Thx anticipatamente
by Wave++ (loving c++)
members.xoom.com/wavexx
wav...@apexmail.com
// Meglio l'uovo fritto o sbattuto?

utilizzato, un distanziatore o riba simile al '\0'??
No. Un file binario e' binario proprio perche' puo' contenere 
qualunque byte. 
Se stati lavorando in C++ con windows, puoi usare un file "indice"
separato, oppure avvalerti dei servizi di filesystem virtuale di 
WIN32, che permettono di avere un filesystem in un unico file. Se 
non ricordo male, c'e' un articolo di Andrea Bioli sull'ultimo PDJ 
che tratta proprio il problema.. non ce l'ho sottomano quindi non 
posso dirti granche' (non ricordo i nomi delle api), ma 
probabilmente sul sito della rivista (
www.edizioni-globali.com
) c'e' 
una preview dell'articolo che puo' darti qualche dritta. 
-- 
God is Real, unless declared Integer.

WIN32, che permettono di avere un filesystem in un unico file.
La risposta di Cristiano - a proposito, ciao Cris - mi ha fatto venire in mente una
tecnica di persistent storage usata in COM. Ok, a te non potrà interessare molto COM, però
potresti esportare tale tecnica al di fuori dal contesto originario e adattarla al tuo
caso. Diciamo subito che mi riferisco allo Structured Storage (questo è il nome preciso
della tecnica).Essa consente di memorizzare più oggetti (nel tuo caso file) in un unico
file. Spesso, un nome alternativo per la medesima idea, è quello di compound file (file
composti) o di docfile.
Ogni file composto contiene uno storage principale, chiamato storage radice (simile alla
root), al di sotto del quale possono esistere altri storage (altre sottodirectory) oppure
altri stream Il discorso si ripete, ricorsivamente, per ogni altro storage contenuto
nell'albero. E' ovvio che ciascun stream funge da file.
Tuttavia, come già detto da Cristiano, non è possibile un overhead zero per creare
analoghe strutture e anche qui lo spazio aggiuntivo per le info necessarie alla creazione
e gestione della stessa sono inevitabili. Uno storage può essere un semplice flag, però ce
ne saranno in misura di O(n), dove n è il numero dei file binari di partenza.
Un'organizzazione ad albero, a differenza di una catena, può comunque portare a soddisfare
meglio eventuali operazioni sui singoli file, a patto che sia bilanciato, ma qui c'è tutta
una teoria a proposito, quindi non mi dilungo oltre...
Ciao
Andrea

una preview dell'articolo che puo' darti qualche dritta.
win win win... sotto solaris la cosa cambia :|
