PDA

Visualizza versione completa : Copia file c++


kats
04-02-2008, 11.38.23
ciao a tutti...ho un problema e spero possiate darmi una mano. Allora devo copiare dei file da una cartella all'altra utilizzando c++. Ho trovao la funzione CopyFile dalle api di windows solo k nn mi funziona. Scrivo la funzione
CopyFile("c:\\prova.txt",c:\\test\\",TRUE);
il compilatore nn mi da nessun errore solo k il file nn viene copiato e nn riesco a capire il xk :S
Spero k qualcuno sia cos gentile da darmi una mano a risolvere questo problema grazie a tutti ciao ciao

Alhazred
04-02-2008, 13.05.57
Prova a scrivere:
CopyFile("c:\\prova.txt",c:\\test\\prova.txt",TRUE);

Non mi mai capitato di usare questa API, ma leggendone le specifiche leggo "Pointer to a null-terminated string that specifies the name of the new file.", quindi potrebbe non essere sufficiente il solo percorso in cui lo vuoi mettere.

Sergio Neddi
04-02-2008, 13.33.36
Domanda da pirla: non che manchi un doppio apice?

Alhazred
04-02-2008, 13.55.53
Se ne sarebbe accorto il compilatore, credo sia un errore di digitazione fatto durante il post.

UG0_BOSS
04-02-2008, 15.08.10
Prova a scrivere:
CopyFile("c:\\prova.txt",c:\\test\\prova.txt",TRUE);

Non mi mai capitato di usare questa API, ma leggendone le specifiche leggo "Pointer to a null-terminated string that specifies the name of the new file.", quindi potrebbe non essere sufficiente il solo percorso in cui lo vuoi mettere.

Molto probabile (Y)

kats
04-02-2008, 15.23.43
si si il doppio apice mancante un errore di battitura...cmq anche nel modo CopyFile("c:\\prova.txt","c:\\test\\prova.txt",TRUE);
nn funziona e nn vorrei usare la funzione system("xcopy..."); in quanto questa mi apre la finestra di dos mentre l'altra no...se no quale api potrei usare??

LoryOne
04-02-2008, 17.03.11
lpExistingFileName
Points to a null-terminated string that specifies the name of an existing file.

lpNewFileName
Points to a null-terminated string that specifies the name of the new file.

bFailIfExists
Specifies how this operation is to proceed if a file of the same name as that specified by lpNewFileName already exists. If this parameter is TRUE and the new file already exists, the function fails. If this parameter is FALSE and the new file already exists, the function overwrites the existing file and succeeds.

;)

UG0_BOSS
04-02-2008, 17.56.15
si si il doppio apice mancante un errore di battitura...cmq anche nel modo CopyFile("c:\\prova.txt","c:\\test\\prova.txt",TRUE);
nn funziona e nn vorrei usare la funzione system("xcopy..."); in quanto questa mi apre la finestra di dos mentre l'altra no...se no quale api potrei usare??

Un esempio di copia di due file da linea di comando, utilizzando solamente la libreria standard e la libreria stat per sapere la dimensione del file.

#include <stdio.h>
#include <sys/stat.h>

int main(int argc, char *argv[]){
FILE *in, *out;
char dati;
int i,dimensionefile;
struct stat filestat;

/* Legge la dimensione del file in ingresso */
stat(argv[1], &filestat);
dimensionefile=filestat.st_size;

/* Apre i file */
in = fopen(argv[1], "r");
out= fopen(argv[2], "w");

/* Copia i file */
for(i=0;i<dimensionefile;i++){
fread(&dati, 1, 1, in);
fwrite(&dati, 1, 1, out);
}

/* Chiude i file */
fclose(in);
fclose(out);

return 0;
}

Alhazred
04-02-2008, 18.43.58
Ho fatto una prova, questo codice funziona:

#include <windows.h>

int main() {
CopyFile("C:\\prova.txt","C:\\prova2.txt",TRUE);
return 0;
}


EDIT: la cartella "test" nella quale vuoi mettere il file copia, esiste? CopyFile non crea la cartella di destinazione e fallisce se la cartella non esiste.

kats
04-02-2008, 21.55.40
Ho risolto...grazie a tutti x il grande aiuto k mi avete dato...se avr ancora bisogno chieder ancora :-)