Modificare un file in c

di il
4 risposte

Modificare un file in c

Ciao a tutti sono nuovo ,stavo tentando di creare un piccolo programma che apra un file e che ne modifichi il contenuto raddoppiando i singoli caratteri .
esempio :
testo originale : aaa
risultato : bbb

questo e il codice :

#include<stdlib.h>
#include<stdio.h>

int main() {
FILE *FPtr;
char x, y;



/* apre il file */
if ((FPtr=fopen("test.txt", "rb+"))== NULL){
printf("Errore in apertura del file\n");
return 0;
}else{


/* ciclo di lettura */
while ( !feof( FPtr ) ) {

/* legge un carattere */
fread(&x, sizeof(char), 1, FPtr);

/* riposiziona */
fseek(FPtr, -sizeof(char), SEEK_CUR);

/* mette il doppio in y e lo scrive */
y=2*x;
fwrite(&y, sizeof(char), 1, FPtr);
}


/* chiude il file */
fclose(FPtr);
}

return 0;
}
il problema forse anche stupido e che il ciclo no termina mai !! fa il primo passaggio correttamente ma quando ritorna inizia un ciclo infinito che mi stampa sempre la seconda lettera
come mai ?? potete spiegarmi come risolvere e a cosa e dovuto questo errore ??
grazie in anticipo !

4 Risposte

  • Re: Modificare un file in c

    alfredocat ha scritto:


    ciao a tutti sono nuovo ,stavo tentando di creare un piccolo programma che apra un file e che ne modifichi il contenuto raddoppiando i singoli caratteri .
    esempio :
    testo originale : aaa
    risultato : bbb
    Vorresti dire bbbbbb
  • Re: Modificare un file in c

    Il problema è semplice: tu scrivi un carattere e torni indietro,il file si allunga e non finisci più di duplicare lo stesso carattere.Piuttosto scrivi su un altro file e rinominalo.
  • Re: Modificare un file in c

    O risolto con un ciclo infinito e inserendo un break con in if sul valore di ritorno del fread e tornando avanti dopo la scrittura!
    
    while ( 1 ) {
    
    			/* legge un intero */
        sent=fread(&x, sizeof(char), 1, FPtr);
    if (sent<1){break;}
    			/* riposiziona */
    
    
        fseek(FPtr, -sizeof(char), SEEK_CUR);
    
    			/* mette il doppio in y e lo scrive */
        y=2+x;
        fwrite(&y, sizeof(char), 1, FPtr);
    
        fseek( FPtr, -sizeof( char ), SEEK_SET );
      }
    
    cosi funziona ! non capisco pero il bisogno di riportare avanti il numero di byte con fseek ?? non dovrebbero riposizionarsi con la scrittura davanti ?? se avete qualche suggerimento vi sarei grato !
    grazie
  • Re: Modificare un file in c

    Il ciclo corretto potrebbe essere
    
    	while ( fread(&x, sizeof(char), 1, FPtr) ) 
    	{
    		fseek(FPtr, -(int)sizeof(char), SEEK_CUR);
    
    		y=2*x;
    		fwrite(&y, sizeof(char), 1, FPtr);
    
    		fseek(FPtr, 0, SEEK_CUR);
    	}
    
Devi accedere o registrarti per scrivere nel forum
4 risposte