PDA

View Full Version : [C] Modificare un file


deviato
02-04-2008, 18:12
Salve di nuovo, volevo chiedervi se è possibile modificare il contenuto di un file, mi spiego meglio.. ammettiamo che io ho per esempio 24 dati e io volessi modificare il contenuto del 13 è possibile farlo?
Io dalla mia somma ignoranza avevo pensato a qualcosa del genere.. ammettendo che n[1] contenga il numero di record ovvero 13 per esempio e il record da sostituire sia in "servizio" definita come una struttura di dati di nome service, è possibile fare una cosa del genere? oppure bisogna fare una cosa piu macchinosa del tipo appoggiarsi ad un file temporaneo?

pf=fopen("servizi.dat","ab");
if (pf==NULL) printf("Impossibile aprire il file\n\n");
else
{fseek(pf,(n[1]-1)*sizeof(struct service),SEEK_SET);
fwrite(&servizio,sizeof(struct service),1,pf);
fclose(pf);
}

andbin
02-04-2008, 19:50
Salve di nuovo, volevo chiedervi se è possibile modificare il contenuto di un file, mi spiego meglio.. ammettiamo che io ho per esempio 24 dati e io volessi modificare il contenuto del 13 è possibile farlo?
Io dalla mia somma ignoranza avevo pensato a qualcosa del genere.. ammettendo che n[1] contenga il numero di record ovvero 13 per esempio e il record da sostituire sia in "servizio" definita come una struttura di dati di nome service, è possibile fare una cosa del genere?Se il file è appunto formato da "record" di dimensione fissa, allora calcolare l'offset, fare il seek e scrivere/leggere il record è assolutamente corretto come concetto.
Facendo il calcolo (n[1]-1) se ne deduce che il tuo indice in n[1] è 1-based ma questa è una questione tua.

Il tuo codice è valido, salvo il fatto che non hai controllato il valore di ritorno di fseek/fwrite.

deviato
02-04-2008, 21:39
Ok.. il problema è che nonostante l'fseek lui continua a scrivermi in coda.. ovviamente il file è organizzato a record.. non capisco dove sia il problema.. se può aiutare posso postare l'intera funzione..

cionci
03-04-2008, 08:10
Perché lo apri in appending ? Aprilo in r+b. In appending ti metti sull'ultimo record.

deviato
03-04-2008, 10:09
giusto.. problema risolto.. nn sapevo della possibilità dell'r+!