esiste un modo in C per poter copiare dei file da una cartella ad un altra??
esiste un modo in C per poter copiare dei file da una cartella ad un altra??
Sarà banale, ma usando la COPY del DOS si farebbe così:Originariamente inviato da pasKuz
esiste un modo in C per poter copiare dei file da una cartella ad un altra??
system("copy <cartella origine>\*.* <cartella destinazione> /s");
Non credo che in C esista una funzione CopiaCartella... comunque potrebbe essere che qualcuno abbia scritto una libreria che lo faccia...
![]()
Svegliati, Neo. Matrix ti possiede...
Puoi aprire un file in modalità "rb", uno in "wb" e scrivere i dati dall'uno all'altro file. Questa è la copia. Per eliminare l'originale .. bho sfrutti i comandi che useresti in console (del o remove)
![]()
ma questa funzione la posso scrivere direttamente nel compilatore?? nel main() ??Originariamente inviato da newbie
Sarà banale, ma usando la COPY del DOS si farebbe così:
system("copy <cartella origine>\*.* <cartella destinazione> /s");
Non credo che in C esista una funzione CopiaCartella... comunque potrebbe essere che qualcuno abbia scritto una libreria che lo faccia...
![]()
Forse ti riferisci ad un codice tipo questo
codice:/* Semplice copia di un file */ #include <stdio.h> #include <stdlib.h> int main () { int a; FILE *fi,*fo; /* Apre il file di tipo testo "prova.txt" e lo copia nella cartella folder */ /* Per i file binari cambiare r+ e w rispettivamente in rb+ e wb */ fi=fopen("prova.txt","r+"); fo=fopen("folder/prova.txt","w"); if (fi!=NULL) { if (fo!=NULL) { while ((a=getc(fi))!=EOF) putc(a,fo); fclose(fo); } else printf("Non posso scrivere il file\n"); fclose(fi); } else printf("Il file non esiste\n"); return 0; }![]()
io a priori non devo sapere quali file devo copiare. quello che vorrei cercare di scrivere è un qualcosa che mi copi tutti i file di una cartella che io dico al compilatore , all'interno di un'altra cartella che cmq ho già detto al compilatore.
con la funzione system sto avendo dei problemi. se mi potreste rispiegare come va usata vi sarei grato
La cosa migliore è usare le API di Windows. Ora sono di corsa, dopo scrivo qualcosa, comunque cerca:
CreateDirectory
FindFirstFile
FindNextFile
CopyFile
Poniamo di voler scrivere una funzione che copia tutti i file dalla directory a (qualunque) alla directory b (qualunque)
Per qualunque chiarimento chiedi pure.codice:#include <stdio.h> #include <windows.h> bool CopyDir(char *Origin, char *Destination) { WIN32_FIND_DATA FileData; HANDLE FindHandle; char answer[10]; char OrigDir[MAX_PATH], DestDir[MAX_PATH]; char OrigFile[MAX_PATH], DestFile[MAX_PATH]; if (!strcmp(Origin, Destination)) { printf("Errore: la directory d'origine e quella di destinazione coincidono !\n"; return false; } strcpy(OrigDir, Origin); strcpy(DestDir, Destination); strcat(OrigDir, "\\*"); strcat(DestDir, "\\*"); if (FindFirstFile(DestDir, &FileData) == INVALID_HANDLE_VALUE) { printf("Attenzione, la directory %s non esiste, crearla (y/n) ? ", Destination); scanf("%s", answer); if (answer[0] == 'y') { if(!CreateDirectory(Destination, NULL)) { printf("Errore nella creazione della directory %s !\n", Destination); return false; } } else return false; } if ((FindHandle = FindFirstFile(OrigDir, &FileData)) == INVALID_HANDLE_VALUE) { printf("Errore nell'accesso alla directory %s !\n", Origin); return false; } do { if (!strcmp(FileData.cFileName, ".") || !strcmp(FileData.cFileName, "..")) continue; strcpy(OrigFile, Origin); strcpy(DestFile, Destination); strcat(OrigFile, "\\"); strcat(DestFile, "\\"); strcat(OrigFile, FileData.cFileName); strcat(DestFile, FileData.cFileName); if(!CopyFile(OrigFile, DestFile, TRUE)) { HANDLE FileHandle; if((FileHandle = CreateFile(DestFile, GENERIC_WRITE, FILE_SHARE_DELETE, NULL, OPEN_EXISTING, 0, NULL)) != INVALID_HANDLE_VALUE) { CloseHandle(FileHandle); printf("Attenzione, il file %s gia' esiste, sovrascriverlo (y/n) ? ", FileData.cFileName); scanf("%s", answer); if (answer[0] == 'y') { if (!CopyFile(OrigFile, DestFile, FALSE)) { printf("Errore nella copia del file %s !\n", FileData.cFileName); } else printf("File %s sovrascritto con successo !\n", FileData.cFileName); } } else printf("Errore nella copia del file %s !\n"); } else printf("File %s copiato con successo !\n", FileData.cFileName); } while (FindNextFileA(FindHandle, &FileData)); return true; }
Scusa per il ritardo... comunque sì, la system è un'istruzione classica del C che chiama comandi DOS. Per essere più precisi, un programmino scemo che copia tutta la cartella Origine in Destinazione potrebbe essereOriginariamente inviato da pasKuz
ma questa funzione la posso scrivere direttamente nel compilatore?? nel main() ??
Ovviamente manca il codice per scegliere le due cartelle... ma il concetto è quello.codice:#include <stdlib.h> void main() { system("copy C:\Origine\*.* C:\Destinazione /s"); system("PAUSE"); }
![]()
Svegliati, Neo. Matrix ti possiede...
ho provato così ma non funziona, le cartelle realmente esistonocodice:#include <stdio.h> #include <stdlib.h> int main() { system("copy C:/Blabla/*.* C:/News /s"); system("PAUSE"); return 0; }
ci sono 0 errori ma eseguendo il prog mi esce sintassi del comando errata
ho provato anche a usare il backslash al posto dello slash
come faccio?