PDA

View Full Version : [C++] Problema apertura in scrittura di files....


LarsFrederiksen
20-02-2007, 22:14
Ciao,
vado subito al sodo sperando nella vostra collaborazione.

Ho necessità di aprire in scrittura 5 file : file1, file2, file3, file4, file5

Vorrei fare questa operazione in un ciclo for.
Ad esempio:

FILE *prova // puntatore al file che sto utilizzando



for (int i=0 ; i<5 ; i++)

{
prova=fopen(" file[i]", "w") // Scrivendo così il valore della i non viene modificato (come è giusto che sia :p )

//eventuali altre istruzioni

.
.
..
}

Vi chiedo....
Qual'è il modo + semplice per fare questa cosa?

Ho pensato di fare un array di stringhe così:

string vettore [5]={"file1", "file2", "file3", "file4", "file5"}

for (int i=0 ; i<5 ; i++)

{
prova=fopen(vettore[i], "w")

//eventuali altre istruzioni

}

Ma neanche così funge.
Ho provato con l'array di caratteri ma mi è sembrato solo di complicare le cose. :confused:

Mi suggerite qualcosa please????
Aspetto fiducioso!!
Ciao, buona serata :) :) :) :) :) :) :) :)

yorkeiser
21-02-2007, 10:13
Non so cosa stai facendo, ma ad occhio devi usare un puntatore diverso per ogni file.
Ergo assegni al puntatore prova vari file

Dovresti ad esempiop avere un array del tipo
FILE* prova[5]

e chiamare con prova[i]=fopen (...)

andbin
21-02-2007, 10:22
Ciao,
Ho necessità di aprire in scrittura 5 file : file1, file2, file3, file4, file5
Innanzitutto devi prestare attenzione al fatto che se vuoi aprire e quindi lavorare contemporaneamente con 5 file, dovrai pure avere 5 FILE*.
Per quanto riguarda i nomi dei file, hai sostanzialmente 2 possibilità: creare un array dei nomi oppure generare dinamicamente il nome del file (questo va bene se i nomi sono in un formato ben preciso, ad esempio del tipo nomenumero).

Modo1:
char *nomi[5] = { "file1", "file2", "file3", "file4", "file5" };
FILE *file[5];
int i;

for (i = 0; i < 5; i++)
file[i] = fopen (nomi[i], "w");

Modo 2:
FILE *file[5];
int i;
char nome[20];

for (i = 0; i < 5; i++)
{
sprintf (nome, "file%d", i+1);
file[i] = fopen (nome, "w");
}
Nota che tutta questa roba è sostanzialmente del "C", non del C++. Inoltre ho tralasciato, per brevità, la gestione degli errori, che però tu dovresti fare. ;)

LarsFrederiksen
21-02-2007, 17:07
Ciao,
intanto grazie mille per l'aiuto!! :) :) :) :)
Ho provato il modo 1 e funziona perfettamente. Io sui file devo lavorarci non contemporaneamente ma uno alla volta; ho quindi utilizato un solo FILE * ed alla fine di ogni ciclo scrivo :

fclose(file);
file=NULL;

Non so se sia necessario far ciò però per scrupolo...... :p

Giusto per capire bene....... ma l'array nomi:

char *nomi[5] = { "file1", "file2", "file3", "file4", "file5" };

è un array di 5 elementi . Ciascun elemento punta ad un char?? :confused:
Non mi è molto chiara la logica della scrittura :rolleyes: :rolleyes:
Ciao, torno a smanettare..... :)

andbin
21-02-2007, 17:17
Ho provato il modo 1 e funziona perfettamente. Io sui file devo lavorarci non contemporaneamente ma uno alla volta; ho quindi utilizato un solo FILE *Allora se l'uso non è contemporaneo puoi certamente usare 1 solo FILE*. All'interno del ciclo for apri il file i-esimo, lo usi e poi lo chiudi e quindi ripeti con il successivo. È chiaro ... dipende sempre da cosa uno deve fare di preciso.

ed alla fine di ogni ciclo scrivo :

fclose(file);
file=NULL;

Non so se sia necessario far ciò però per scrupolo...... :p L'assegnazione di NULL non è necessaria.

Giusto per capire bene....... ma l'array nomi:

char *nomi[5] = { "file1", "file2", "file3", "file4", "file5" };

è un array di 5 elementi . Ciascun elemento punta ad un char??Ogni elemento dell'array è un puntatore a char che punta ad una stringa "literal".

LarsFrederiksen
24-02-2007, 15:22
I tuoi consigli mi sono stati molto utili.
A presto(i dubbi non finiscono mai!! :D ) .........e grazie :)