Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460

    [c] leggere file e salvarlo in una stringa

    Ho bisogno di leggere un file e salvarlo in una stringa.
    Del file non so la grandezza quindi parto da:

    char *testo;

    qualcuno mi completa il codice please ?

  2. #2
    Penso che l'unica soluzione sia creare un array di caratteri di dimensione statica (grande), leggere il file e poi copiare i campi inseriti nell'array in uno di dimensioni appropriate.

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    se no la realloc ma sono impazzito

    se qualcuno sa usarla meglio di me.. benvenga

  4. #4
    con realloc verrebbe una cosa del genere credo:

    FILE* fp;
    char* testo,*temp;
    int i=0;

    fp=fopen("pippo.txt","r");
    testo=(char*) malloc(sizeof(char));

    while(fscanf(fp,"%c",&temp)!=EOF) {
    testo=(char*) realloc(testo,(i+1)*sizeof(char));
    *(testo+i)=temp;
    i++;
    }

    testo[i]='\0';

  5. #5
    Originariamente inviato da uMoR
    se no la realloc ma sono impazzito

    se qualcuno sa usarla meglio di me.. benvenga
    Ciao, dico anche la mia.
    Visto che la dimensione del file è nota a priori credo che sia meglio una malloc():
    codice:
    // MinGW code
    #include <iostream>
    //per il BCC32:
    // #include <iostream.h>
    #include <conio.h>
    
    int main()
    {
    	FILE *file; 
    	char ch, *buff, FileName[256]="pippo1.txt";
    	int indice, fileDim = 0;
    	
    	if (( file = fopen( FileName, "rb")) != NULL)
    	{
    		// 'Conto quanti bytes ci sono nel file
    		while( ! feof( file ) )
    		{
    			fgetc( file );
    			fileDim++;		
    		}
    		fileDim--,
    		printf("Dimensione del file %s = %d\n", FileName, fileDim);
    		
    		// Alloco la memoria necessaria per contenere il file +1
    		buff = (char*) malloc(sizeof(char) * fileDim+1);
    		// Mi riporto all' inizio del file
    		fseek(file, 0, SEEK_SET);
    		
    		for(indice=0; indice<fileDim; indice++)
    		{
    			buff[indice] = fgetc( file );
    		}
    		printf("Contenuto del file :\n%s", buff);
    		fclose(file);
    	}
    	getch();
    	return 0;
    }
    La realloc() è abbastanza lenta, meglio evitarla se possibile.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  6. #6
    Naturalmente potresti anche eliminare questo ciclo:

    codice:
    	for(indice=0; indice<fileDim; indice++)
    	{
    		buff[indice] = fgetc( file );
    	}
    con una fread() ...
    codice:
    	fread(buff, fileDim, 1, file);
    che si occupa di copiare tutto il file nel buffer.
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  7. #7
    Prometto che è l'ultima versione
    Sicuramente la più compatta:
    codice:
    #include <iostream>
    #include <conio.h>
    
    int main()
    {
    	FILE *file; 
    	char ch, *buff, FileName[256]="pippo1.txt";
    	int indice, fileDim = 0;
    	if(( file = fopen( FileName, "rb")) != NULL)
    	{
    		// Si posiziona alla fine del file
    		fseek(file, 0, SEEK_END);
    		// Legge la posizione attuale
    		fileDim = ftell(file);
    		// Alloca la dimensione del buffer
    		buff = (char*) malloc(sizeof(char) * fileDim+1);
    		printf("Dimensione del file %s = %d\n", FileName, fileDim);
    		// Mi riporto all'inizio del file
    		fseek(file, 0, SEEK_SET);
    		// Copio tutto il contenuto del file nel buffer
    		fread(buff, fileDim, 1, file);
    		printf("Contenuto del file :\n%s", buff);
    		// Chiudo il file
    		fclose(file);
    	}
    	getch();
    	return 0;
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2002
    Messaggi
    2,460
    grazie a tutti l'ultimo funziona alla perfezione

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.