PDA

Visualizza la versione completa : [C++] problema con gli stream


bonzi
26-12-2008, 18:46
Salve a tutti.
Sto creando un piccolo programma con c++, e vorrei sapere come si pu fare per cambiare il nome del file associato ad uno stream.
Mi spiego meglio.
Dopo aver aperto uno stream input di nome f1 gli ho associato un file di nome "name" [ifstream f1("name").
A questo punto, se il file non esiste, desidero cambiare il file associato ad f1. Ho provato a chiudere lo stream [f1.close()] e a riaprirlo con un nuovo nome, ma non sembra funzionare.
Per ora l'unica alternativa che ho trovato consiste nell'aprire un nuovo stream ed associarlo con il nuovo nome....idee pi comode?
Grazie mille

Pacio88
26-12-2008, 23:25
Se non ho capito male il tuo programma dovrebbe rinominare un file di nome "x" gi esistente?

mondobimbi
27-12-2008, 08:34
usa il costruttore di ifstream senza argomenti


ifstream infile;

infile.open ("myfile.txt", ifstream::in);

if (infile.good())
....;


e apri il file con open
ciao
sergio

bonzi
27-12-2008, 15:59
Originariamente inviato da Pacio88
Se non ho capito male il tuo programma dovrebbe rinominare un file di nome "x" gi esistente?

esatto,il problema proprio questo. Devo rinominare un nome file dato da utente, solo se questo risulta essere errato.

per Sergio: la tua opzione proprio quella che ho provato ad utilizzare io...x non so perch non funziona

oregon
27-12-2008, 16:03
Rinominare un file esistente e' una cosa (e si fa con l'opportuna funzione del sistema operativo, a seconda che usi Windows o Linux ...).

Quello che chiedi pero', non e' cosi' chiaro ...

bonzi
27-12-2008, 18:18
Originariamente inviato da oregon
Rinominare un file esistente e' una cosa (e si fa con l'opportuna funzione del sistema operativo, a seconda che usi Windows o Linux ...).

Quello che chiedi pero', non e' cosi' chiaro ...

void nome_file(char file[],const int sz) {
cout<<"inserisci il nome del file da cui estrarre i dati"<<endl;
cin.getline(file,sz);
}

void modifica_file(char A[]) {
strcat(A,".txt");
}

int main () {
...
...
char B[32];
int sz=32;
nome_file(B,sz);
ifstream f1;
f1.open(B);
if(f1.fail()) {
modifica_file(B);
f1.close();
f1.open(B);
}

ecco a voi la porzione di codice "incriminata".
Il compilatore non d alcun errore ma, se viene eseguita la funzione modifica, lo stream f1 non trova pi il file(anche se il nome scritto nell'array B risulta essere corretto dopo la modifica).

oregon
27-12-2008, 18:35
Una spiegazione contorta ma alla fine si e' capito cosa intendi ...

Se c'e' un errore (e te ne accorgi dalla fail), devi eseguire una

f1.clear()

e NON devi chiudere il file prima di riaprirlo.

bonzi
27-12-2008, 19:07
ottimo, la funzione che mi serviva.
Grazie mille a tutti per l'attenzione, Au revoir

Loading