PDA

View Full Version : [C] Scrittura non ordinata su file


6r13v3r
22-03-2011, 11:39
Salve a tutti,
ho un problema con un programma che sto sviluppando.
Devo leggere da un file a blocchi da 1024 bit, e copiarli su un altro file che viene creato e riempito mano a mano.
Dato che può succedere che la lettura non avvenga in ordine, quindi ci possono essere dei pacchetti letti non in sequenza, anche la scrittura segue tale (dis)ordine. Ad esempio se leggo il primo blocco, poi il terzo, poi il quarto ed infine il secondo, anche la scrittura avverrà nell'ordine 1-3-4-2.
Per fare questo uso la fseek per spostare il cursore di volta in volta.

Facendo in questo modo, il file copia, era di circa un quinto di quello originale, per questo ho pensato che dovessi prima creare il file di dimensione giusta, riempiendolo di 0, e poi sovrascrivere i dati nell'ordine in cui li leggo.
Così facendo alla fine ho un file di dimensione quasi esatta, con un byte in più, ma che non posso aprire. Andando a vedere con il notepad, mi sono accorto che i dati non sono scritti nello stesso ordine dell'originale, e che manca l'EOF. Ho anche verificato, tramite stampe, i valori di ftell e fseek, e sono quelli che mi aspetterei.

Qualcuno di voi sa come posso risolvere una situazione di questo genere, magari postando quache esempio?

WarDuck
22-03-2011, 12:30
Potresti memorizzare i dati in memoria e poi comporre il file alla fine, quantomeno per file piccoli.

Volendo potresti fare la stessa cosa con file grossi magari scrivendo "super-blocchi" di 4096bit.

Appena si completa un super-blocco puoi scriverlo su file in posizione corretta.

Se operi in ambiente *nix ci dovrebbe essere la funzione mmap che potrebbe aiutarti, dovrebbe funzionare anche in scrittura.

6r13v3r
02-04-2011, 13:48
wow quanto tempo!
finalmente ho modo di rimetterci mano, quindi intanto grazie del consiglio...
mi documenterò su questa mmap che fin'ora conoscevo solo a livello teorico, poi ti farò sapere ;)