Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 19
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    59

    [C++]Copiare contenuto file in un altro

    Ciao!! Sto lavorando in C++ usando il Visual C. Ho scritto il seguente codice che serve per copiare il contenuto di un file txt in un altro file txt. Precisamente, dopo l'apertura del file iniziale in modalitá binaria, creo un buffer per la lettura, inizio a copiare dall'indice 0 tramite la funzione pubseekoff e alla fine scrivo il contenuto nel file di uscita:
    codice:
     
    f_input1.open("input.txt",ios::binary | ios::in);  
     pbuf=f_input1.rdbuf(); 
    size=pbuf->pubseekoff (0,ios::end,ios::in);
     pbuf->pubseekpos (0,ios::in); 
     buffer=new char[size];  
     pbuf->sgetn (buffer,size);  
    f_input1.close();  
     f_output.open("output.txt",ios::out); 
      f_output.write(buffer,size);
    Problema: quando eseguo il debug e il run voglio che il file output venga generato immediatamente e invece quello che succede é: lancio il programma, apro il file input, modifico le mie variabili, chiudo e solo al successivo RUN viene generato il file output.
    Sto sbagliando qualcosa nel codice?
    Grazie tante!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Manca la close del file in scrittura.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    59
    Scusami mi sono dimenticata di scriverla qui.
    Nel mio codice avevo scritto:
    codice:
    getchar();   
    f_output.close();  
     free(buffer);

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    La getchar a che ti serve? Eliminala
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    59
    fatto!
    ma non é cambiato niente!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Cioè, fammi capire, tu esegui il codice e il file non viene creato?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    59
    Il file output viene creato solo quando rieseguo il codice la seconda volta. La prima volta viene creato solo input.

  8. #8
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Se allochi il buffer con new[] lo devi deallocarore con delete[].

    A parte questo: il modo più semplice è:
    codice:
    f_input1.open("input.txt",ios::in);  
    f_output.open("output.txt",ios::out); 
    f_input1 << f_output.rdbuf();
    
    // close dei due file.
    Se poi ti interessa il dietro le quinte è un altro discorso.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

  9. #9
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    59
    cosi facendo mi genera un file di uscita vuoto!

  10. #10
    Utente di HTML.it L'avatar di shodan
    Registrato dal
    Jun 2001
    Messaggi
    2,381
    Mmm, a quanto pare l'implementazione di VC++ 2010 ha un bug.
    Giusto per capirsi, il Thincking in C++ riporta questo codice:
    codice:
      ifstream in("Iofile.cpp");
      assure(in, "Iofile.cpp");
      ofstream out("Iofile.out");
      assure(out, "Iofile.out");
      out << in.rdbuf(); // Copy file
      in.close();
      out.close();
    che assert a parte è quello che ti ho detto.
    Poco male.
    codice:
    std::string line;
    f_input1.open("input.txt",ios::in);  
    f_output.open("output.txt",ios::out); 
    
    while(std::getline(f_input1,line)) {
        f_output << line << endl;
    }
    
    // chiusura file
    
    // close dei due file.
    This code and information is provided "as is" without warranty of any kind, either expressed
    or implied, including but not limited to the implied warranties of merchantability and/or
    fitness for a particular purpose.

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.