Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Copia file binario
Forum - C/C++ - Copia file binario

Avatar
FedFelpato (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/03/2013

Segnala al moderatore
Postato alle 12:50
Domenica, 10/03/2013
Ciao a tutti. Ho scritto un codice per copiare un file binario ma mi da un errore. Ecco il codice:

#include <iostream>
#include <fstream>

using namespace std;

int main(){
    ifstream ingr;
    ofstream usc;
    ingr.open("source.txt", ios::in|ios::binary);
    usc.open("destination.txt", ios::out|ios::binary);
    if((ingr.fail()==true)|(usc.fail()==true)){
        return -1;    
    }
    char app[100];
    int letti = ingr.read(app,128);
    if(ingr.bad()==true) return -1;
    while(ingr.eof()==false){
        usc.write(app,letti);
        if(ingr.bad()==true) return -1;
        letti = ingr.read(app,128);
        if(ingr.bad()==true) return -1;
    }
    usc.write(app,letti);
    if(usc.bad()==true) return -1;
    ingr.close();
    usc.close();
    return 0;
}

L'errore è in questa riga:
int letti = ingr.read(app,128);
g++ -Wall -o "copia file" "copia file.cpp" (nella cartella: /home/paolo/C++/iostream e stringhe)
copia file.cpp: In function ‘int main()’:
copia file.cpp:15:31: error: invalid conversion from ‘void*’ to ‘int’ [-fpermissive]
copia file.cpp:20:31: error: invalid conversion from ‘void*’ to ‘int’ [-fpermissive]
Compilazione fallita.

Sul computer a scuola con windows il codice funzionava. Invece sul mio pc con ubuntu mi dà errore. Potrebbe essere per questo???
Grazie mille.

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 13:27
Domenica, 10/03/2013
Beh semplicemente perchè la funzione read non restituisce un int ma un istream& come puoi vedere qui
http://www.cplusplus.com/reference/istream/istream/read/
P.S.: su windows non ti restituiva l'errore forse perchè eseguiva un cast implicito :D

PM Quote
Avatar
FedFelpato (Normal User)
Newbie


Messaggi: 4
Iscritto: 10/03/2013

Segnala al moderatore
Postato alle 9:47
Lunedì, 11/03/2013
Ok grazie per la risposta. Quindi come posso modificare il mio codice e inoltre mi potresti spiegare quali sono i vantaggi di leggere con binary o senza e in particolare quando conviene usare il primo metodo e quando il secondo?
Grazie mille per l'aiuto :)

PM Quote
Avatar
Saik (Normal User)
Pro


Messaggi: 117
Iscritto: 07/08/2011

Segnala al moderatore
Postato alle 11:02
Lunedì, 11/03/2013
Allora scrivere in binario può essere utile se si creano file ad accesso diretto ma per i file ad accesso sequenziale è meglio usare l'output formattato ( << ). Per quanto riguarda il codice devi semplicemente eliminare la variabile 'letti' e sostituire il  usc.write(app,letti);  con  usc.write(app,128);
P.S. se la variabile app è composta da 100 caratteri perchè ne vuoi immagazzinare 128?:nono:

PM Quote