Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it L'avatar di pasKuz
    Registrato dal
    Jun 2004
    Messaggi
    687

    [C] copia dati cartella

    esiste un modo in C per poter copiare dei file da una cartella ad un altra??

  2. #2
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299

    Re: [C] copia dati cartella

    Originariamente inviato da pasKuz
    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ì:

    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...

  3. #3
    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)


  4. #4
    Utente di HTML.it L'avatar di pasKuz
    Registrato dal
    Jun 2004
    Messaggi
    687

    Re: Re: [C] copia dati cartella

    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...

    ma questa funzione la posso scrivere direttamente nel compilatore?? nel main() ??

  5. #5
    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; 
    }

  6. #6
    Utente di HTML.it L'avatar di pasKuz
    Registrato dal
    Jun 2004
    Messaggi
    687
    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

  7. #7
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    La cosa migliore è usare le API di Windows. Ora sono di corsa, dopo scrivo qualcosa, comunque cerca:
    CreateDirectory
    FindFirstFile
    FindNextFile
    CopyFile

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2003
    Messaggi
    423
    Poniamo di voler scrivere una funzione che copia tutti i file dalla directory a (qualunque) alla directory b (qualunque)
    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;
    }
    Per qualunque chiarimento chiedi pure.

  9. #9
    Utente di HTML.it L'avatar di newbie
    Registrato dal
    Dec 2005
    Messaggi
    299

    Re: Re: Re: [C] copia dati cartella

    Originariamente inviato da pasKuz
    ma questa funzione la posso scrivere direttamente nel compilatore?? nel main() ??
    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 essere

    codice:
    #include <stdlib.h>
    
    void main()
    {
        system("copy C:\Origine\*.* C:\Destinazione /s");
        system("PAUSE");
    }
    Ovviamente manca il codice per scegliere le due cartelle... ma il concetto è quello.

    Svegliati, Neo. Matrix ti possiede...

  10. #10
    Utente di HTML.it L'avatar di pasKuz
    Registrato dal
    Jun 2004
    Messaggi
    687
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    int main()
    {
        system("copy C:/Blabla/*.* C:/News /s");
        system("PAUSE");
        return 0;
    }
    ho provato così ma non funziona, le cartelle realmente esistono
    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?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.