• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
[C++] leggere e scrivere file
#1
Per leggere e scrivere file la standard template library mette a disposizione la classe fstream.
Utilizzarla è semplice basta includere fstream, per aprire un file: in lettura si istanzia la classe ifstream e in scrittura si istanzia ofstream.

Ecco un esempio, dove si utilizza fstream per creare una copia di un file:
Codice PHP:
#include <iostream>
#include <fstream> // file stream
#include <string>

using namespace std;

int main(void)
{
    
string fileLettura;        //conterrà il nome del file da copiare
    
string fileScrittura;    //conterrà il nome del file copiato
    
string tmp;                //conterrà la riga da copiare
    
cout << "Digitare il nome del file da copiare (NB. indicare anche l'estensione): ";
    
cin >> fileLettura;        
    
cout << "Digitare il nome della copia: ";
    
cin >> fileScrittura;

    
ifstream leggi(fileLettura);        // si istanzia ifstream            SINTASSI: ifstream NOME_ISTANZA(NOME_FILE)
    
ofstream scrivi(fileScrittura);        // si istanzia ofstream            SINTASSI: ifstream NOME_ISTANZA(NOME_FILE)

    
while(getline(leggitmp))    // legge una linea alla volta e la salva in tmp
    
{
        
scrivi << tmp << endl;    // scrive la linea letta sul nuovo file
        
cout << tmp << endl;    // visualizza la linea copiata
    
}


    
system("pause");
    return 
0;

 
Rispondi
#2
grazie ma io devo fare così
per il file di configurazione:
leggere la prima stringa e memorizzarla in una variabile(poi) il resto lo faccio con il gdk

salvataggio : dovresti spiegarmi come scrivere il file XD
 
Rispondi
#3
Per leggere la prima riga e memorizzarla in una variabile basta togliere il while dall'esempio.

Codice PHP:
#include <iostream>
#include <fstream> 
#include <string>
using namespace std;

int main(void)
{
    
string fileLettura;        //conterrà il nome del file da copiare
    
string tmp;                //conterrà la riga da copiare
    
cout << "Digitare il nome del file in lettura: ";
    
cin >> fileLettura;

    
ifstream leggi(fileLettura);        // si istanzia ifstream            SINTASSI: ifstream NOME_ISTANZA(NOME_FILE)
    
    
getline(leggitmp); // adesso la prima linea del file è memorizzata nella variabile tmp

    
cout << tmp// giusto per verificare, eccola su schermo

    
system("pause");
    return 
0;


Per scrivere il file si istanzia ofstream, nel primo esempio prendevo ogni linea del file letto e la scrivevo su un altro file. Ecco un altro esempio:
Codice PHP:
#include <iostream>
#include <fstream> 
#include <string>
using namespace std;

int main(void)
{
    
string parola;
    
string fileScrittura;    //conterrà il nome del file copiato
    
cout << "Nome del file su cui scrivere: ";
    
cin >> fileScrittura;
    
cout << "Parola da scrivere: ";
    
cin >> parola;

    
ofstream scrivi(fileScrittura);        // si istanzia ofstream            SINTASSI: ifstream NOME_ISTANZA(NOME_FILE)
    
    
scrivi << parola// scrivo la variabile parola sul file inserito in scrivi
    
    
return 0;

 
Rispondi
#4
Complimenti, ma ti consilgio solo una cosa : (leggi il codice sorgente XD)
Codice PHP:
#include <iostream>
#include <string>
//consiglio di usare:
using std::cout;
using std::endl;

using std::string;
//perchè utilizzi uno standard chiamato ISO/IEC 14882:2003,  soprattutto utilizzi solo quello che ti serve 
 
Rispondi
#5
Quel metodo non mi è mai piaciuto. Solitamente preferisco indicare il namespace assieme al comando, come è buona norma fare nelle classi riutilizzabili. (std::cout << "hello world"Wink
Inoltre (correggimi se sbaglio, non sono molto informato sull'argomento) penso che nello standard del 2003 ci siano anche gli altri due metodi.

Comunque grazie per avermi corretto. Effettivamente includere tutto il namespace, pur essendo più comodo, è sconveniente.
D'altronde se si facesse così per ogni namespaces diventerebbe inutile il loro utilizzo...
 
Rispondi
#6
(03-03-2011, 09:40 PM)steve Ha scritto: Quel metodo non mi è mai piaciuto. Solitamente preferisco indicare il namespace assieme al comando, come è buona norma fare nelle classi riutilizzabili. (std::cout << "hello world"Wink
Inoltre (correggimi se sbaglio, non sono molto informato sull'argomento) penso che nello standard del 2003 ci siano anche gli altri due metodi.

Comunque grazie per avermi corretto. Effettivamente includere tutto il namespace, pur essendo più comodo, è sconveniente.
D'altronde se si facesse così per ogni namespaces diventerebbe inutile il loro utilizzo...
Hai ragone l'altro metodo, attenendosi allo standard, è "std::quellochetiserve".
Per questo te l'ho detto, se fati tutto il namespace, è sotto inteso che utilizzerai tutti i namespace.
Io facevo come te, ma poi studiando da un libro standardizzato, e mi sono corretto, anche perché questo metodo rende tutto il codice più serio è più figo XD
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  File header del C MickeyCrashRayman 16 2,001 15-10-2011, 05:13 PM
Ultimo messaggio: steve
  [C++] Gestire un programma con + file cpp TheFedex87 10 2,282 02-04-2011, 10:37 AM
Ultimo messaggio: Alche

Vai al forum:


Browsing: 1 Ospite(i)