Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117

    [C] Ricopiare un qualsiasi file in C

    Ciao a tutti
    Ho bisogno di leggere da programma C un file qualsiasi ( .txt, .bmp, .wav, .exe, non importa quale) e poi, mediante operazioni di scrittura, ricrearlo tale e quale. In pratica voglio ricopiare tutti i bit (o, meglio, tutti i byte) del file.
    Ho in realtà anche elaborato una soluzione, ma non so se è poco elegante o concettualmente sbagliata. Se qualcuno più esperto mi dà un parere mi fa un piacere:



    codice:
          char byte[MAX];
          int data_length,num;
          
          FILE *fin,*fout;
          fin = fopen("Immagine.bmp","r");
          data_length = fread(byte,1,MAX,fin);
          
    
          fout = fopen("Immagine2.bmp","a");
          if (fout==NULL)
          {	 printf("Errore in apertura del file\n");
           	 exit(1);
          }
    
          num=fwrite(byte,1,data_length,fout);

    Voi che ne dite?

  2. #2
    Che sei limitato alla dimensione del buffer; devi usare un ciclo.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2001
    Messaggi
    117
    Sì, va bè, questo non è un problema... sì fa in poco. Mi chiedevo solo se non era scorretto usare i char per ricopiare qualsiasi tipo di file, anche non testuale.

  4. #4
    Soluzione con loop :
    codice:
    /* Semplice copia di un file */
    #include <stdio.h> 
    #include <stdlib.h> 
    
    int main () 
    { 
    	int a; 
    	FILE *fi,*fo; 
            /* Apre il file di tipo testo "prova.txt" e lo copia nella
            cartella folder */
    	/* Per i file binari cambiare r+ e w rispettivamente in rb+ 
            e wb */
    	fi=fopen("prova.txt","r+");       
    	fo=fopen("folder/prova.txt","w"); 
    	if (fi!=NULL) 
    	{
    		if (fo!=NULL) 
    		{
    			while ((a=getc(fi))!=EOF)
    				putc(a,fo); 
    			fclose(fo); 
    		}
    		else
    			printf("Non posso scrivere il file\n");
    		fclose(fi);
    	}
    	else
    		printf("Il file non esiste\n");
    	return 0; 
    }
    Saluti

  5. #5
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    Originariamente inviato da Cell
    Mi chiedevo solo se non era scorretto usare i char per ricopiare qualsiasi tipo di file, anche non testuale.
    Visto che potrebbe darti problemi, lavora in modalità binaria con fread ed fwrite
    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  6. #6
    Comunque il tipo di dati char è corretto, perché rappresenta un singolo byte.
    Amaro C++, il gusto pieno dell'undefined behavior.

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 © 2025 vBulletin Solutions, Inc. All rights reserved.