Problema scrittura e lettura su file

di il
8 risposte

Problema scrittura e lettura su file

Stavo facendo qualche prova usando fwrite e fread, il compilatore non da errori e il programma sembra funzionare correttamente ma quando vado ad aprire il file modificato dal programma mi dice che ci sono caratteri non validi (io ho inserito solo numeri). Qualcuno saprebbe spiegarmi il motivo?

(usando fscanf e fprintf nessuno problema, il contenuto del file è corretto)

posto il codice:

// operazioni base su file fwrite e fread
#include <stdio.h>
#include <stdlib.h>
int main(){
	FILE *pf;
	int i,num;
	pf =fopen("dati.txt","w");
	if (pf){
		for (i=0;i<4;i++){
			printf("inserisci numero: ");
			scanf("%d\n",&num);
			fwrite(&num,sizeof(int),1,pf);
		}
		fclose(pf);
	}else{
		exit(EXIT_FAILURE);
	}
	pf=fopen("dati.txt","r");
	if (pf){
		for (i=0; i<4;i++){
			fread(&num,sizeof(int),1,pf);
			printf("%d\n",num);
		}
		fclose(pf);
	}
	return 0;
}

8 Risposte

  • Re: Problema scrittura e lettura su file

    Per usare la fread e la fwrite i file devono essere aperti in binario con

    "wb"

    "rb"
  • Re: Problema scrittura e lettura su file

    Anche modificando "w" con "wb" e "r" con "rb" da lo stesso problema .-.

    ... mi sta venendo un dubbio: potrebbe essere che il file in binario è scritto correttamente ma non posso visualizzare il contenuto con un editor di testo qualunque perchè scritto in binario?
  • Re: Problema scrittura e lettura su file

    Wb e rb sono necessari

    Ovviamente non potrai visualizzare i dati con un editor di testo. Dovrai usare un editor binario o il debug da console.
  • Re: Problema scrittura e lettura su file

    Il file che scrivi E' in binario, basta che noti come hai scritto la fwrite (e la fread). Quindi il tuo file, contenendo caratteri con codice ascii < 32, manda in errore l'editor di testo che si aspetta solo caratteri coerenti con un file di testo.
  • Re: Problema scrittura e lettura su file

    Ciao,
    tu leggi alcuni numeri ma vuoi ovviamente stampare i caratteri corrispondenti. Nel senso che se leggi 1 allora vuoi stampare '1', e non il carattere corrispondente al codice ASCII 1 (che è un carattere speciale).
    Per far questo puoi modificare il ciclo di scrittura in questo modo:
    
            for (i=0; i<4; i++)
            {
                printf("inserisci numero: ");
                scanf("%d",&num);
                char c = num+'0';
                fwrite(&c,sizeof(char),1,pf);
            }
            fclose(pf);
    
    In particolare rifletti su cosa fa la riga
    char c = num+'0';
  • Re: Problema scrittura e lettura su file

    Grazie a tutti per le risposte, sono state tutte utili! Molto carina l'idea di minomic grazie!
  • Re: Problema scrittura e lettura su file

    aguero93 ha scritto:


    Molto carina l'idea di minomic grazie!
    Prego, però il merito di questa idea non è mia. Io l'ho già vista (e utilizzata) più volte e credo sia uno di quei procedimenti standard per queste cose.

  • Re: Problema scrittura e lettura su file

    Convertire un valore binario in ASCII aggiungendo 48 (0x32 ovvero '0') è normalissimo.

    Ma non lo userei se stessi usando un file binario proprio perché se lo faccio voglio memorizzare i dati in binario (con fwrite/fread). Altrimenti uso la modalità testo e le più comode funzioni per la scrittura/lettura di testo.
Devi accedere o registrarti per scrivere nel forum
8 risposte