ho un problema con la gestione dei file,se per esempio creo un file di integer quando poi lo vado a leggere pero' mi considera i numeri inseriti come fossero un unico numero,cosa posso fare???
ho un problema con la gestione dei file,se per esempio creo un file di integer quando poi lo vado a leggere pero' mi considera i numeri inseriti come fossero un unico numero,cosa posso fare???
prova ad inserirli in un vettore..
Laddove "vettore.txt" è il file dove sono memorizzati gli interi..void leggi_da_File (vettore& a, int& size)
{
size = 0;
ifstream in ("vettore.txt");
if(in) {
while( in >> a[size]) size++ ;
}
in.close();
}
Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)
ma quello degli interi era un esempio,sto facendo delle prove per capire bene come funziona l'utilizzo dei file,poi li dovro' usare per un progetto con delle classi da me create...
non so se ho capito bene il problema..
Premetto che ho usato i file solo per salvarci sopra o per leggerci le informazioni in esso contenute, non conosco eventuali altre applicazioni.
Forse con delle classi tu vuoi utilizzare i file per salvarci (o per leggerci) dei dati: è un problema legato alla persistenza, giusto??
Forse ti servono le varie modalità con cui un file può essere aperto, sia in lettura ch in scrittura??
Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)
si,un altro problema che ho e' che uso un oggetto di tipo ofstream per scrivere sul file e ogni volta che faccio ripartire nel momento in cui dichiaro l'oggetto ofstream ricrea il file dei dati cancellando quello precedente
es.
ofstream f1("numeri");
ecc.
ci sono vari modi per aprire un file..
se lo apri in output, senza definire null'altro, per default se il file non esiste, lo crea, altrimenti lo cancella e poi lo sovrascrive..
in lettura, invece, se il file non esiste ti dà errore e l'apertura è in modalità testo.
è possibile modificare la modalità di apertura di un file con i seguenti specificatori, ti dico quelli che conosco:
ios::binary //apertura in modalità binaria
ios::in //apertura in input
ios:ut //apertura in output
ios::in | ios:ut //apertura in input e output
ios::app //apertura in output con append:se il file esiste non lo cancella, ma continua a scrivere..
ios::noreplace //in scrittura se il file esiste dà errore
ios::nocreate //in scrittura non crea il file se non esiste
ios::trunc //se il file esiste ne cancella il contenuto
Tieni prsente che se introduci un solo specificatore perdi tutti i parametri di default!!!
Avrai, allora:
ofstream out("nomefile.txt",ios:ut | ios::app);
apertura in modalità output e append: non ti cancella il file, ma comincia a scrivere da dove è finito..
Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)
ok provero' con l'append.
rimane il problema che se faccio ad es.
ifstream f2("numeri");
f2>>y;//dove y e' una var integer
cout<<y;
se in precedenza ho inserito nel file i numeri 1,23 e 4 mi stampa 1234 come fosse un unico num...
ho provato l'append e in compilazione mi da un warning:
warning: ANSI C++ forbids declaration `app' with no type
e un errore:
`int ios::app' is not a static member of `class ios'
Ma hai mica detto al programma che i numeri sono separati??rimane il problema che se faccio ad es.
ifstream f2("numeri");
f2>>y;//dove y e' una var integer
cout<<y;
se in precedenza ho inserito nel file i numeri 1,23 e 4 mi stampa 1234 come fosse un unico num...
Quando fai
f2>>y;
Lo stream ti butta tutti i numeri nel programma, in rapida successione..(almeno credo visto quello che ti è successo)
1,23 non è un float??
Prova costruendoti un vettore, che tra l'altro è l'unico modo che conosco per visualizzare una sequenza di numeri nel modo corretto.Anzi mi sono addirittura meravigliato che in y non ti abbia messo solo il 4!!!Per ogni numero che inserisci devi creare un apposito contenitore, una variabile...perciò ti suggerisco un array..
Boh!!ho provato l'append e in compilazione mi da un warning:
warning: ANSI C++ forbids declaration `app' with no type
e un errore:
`int ios::app' is not a static member of `class ios'
Qui casca l'asino che è in me!!!
Magari se posti il prog possiam vedere se è un errore di codice, se è un errore di impostazioni del dev non so che dirti!!
Per liquidare un popolo si comincia con il privarli della memoria.Si distruggono i loro libri, la loro cultura, la loro storia. E qualcun’ altro scrive loro altri libri, li fornisce di un’altra cultura, inventa per loro un’altra storia. (Milan Kundera)
intendevo 1 e 231,23 non e' un float?
errori di codice non ci sono,normalmente funziona quando aggiungo l'append pero' mi da' il warning e l'errore....