Как я могу скопировать файлы каталога в другую папку?

Мне нужно скопировать файлы из одного каталога в другой, я нахожусь в той части, где я размещаю strtok в массивы, и это меня очень смущает. У меня 2562 файла для копирования. Я думаю, что мне нужен 2D массив, но я всегда получаю ошибки. Помогите...

#include<stdio.h>
#include<stdlib.h>
#include<dirent.h>
#include<sys/types.h>
#include<windows.h>
#include<string.h>

char** str_split(char* a_str, const char a_delim);

DIR *dir;
struct dirent *sd;
FILE *source, *target;



int main(){

char *token;

int ctr;
char pathsource[40];
char pathtarget[40];
strcpy(pathsource,"C:\\");
strcpy(pathtarget,"C:\\");
system("pause");

dir = opendir(pathsource);
if(dir){

    while( (sd=readdir(dir)) != NULL ) {


        token = strtok(sd->d_name,"\n");
        printf("%s\n",token);


    }       

    closedir(dir);  

}



return 0;
}

кстати, я только что удалил немного из C:\ \ - это не настоящий код.

1 ответ

Если вы используете ОС Windows, вы можете использовать команду такой system("copy dir1\\*.txt dir2\\"); для которого параметр (командная строка) может быть построен, как вы хотите.

Например:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>

int main(void) 
{
    char comstart[] = "copy";
    char pathsource[] = "D:\\testdir\\";
    char copypattern[] = "*.*";
    char pathtarget[] = "D:\\testdir2\\";
    char * command;
    // building command
    command = (char*) malloc(strlen(comstart) + strlen(pathsource) + strlen(copypattern) + strlen(pathtarget) + 3);
    if(!command)
    {
        printf("Unexpected error!\n");
        return 1;
    }
    strcpy(command, comstart);
    strcat(command, " ");
    strcat(command, pathsource);
    strcat(command, copypattern);
    strcat(command, " ");
    strcat(command, pathtarget);
    // command execution
    int res = 0;
    res = system(command);
    if( res == 0)
    {
        printf("Files copied successfully!\n");
    }
    else
    {
        printf("Unexpected error with code %d!\n", res);
    }
    return 0;
}

РЕДАКТИРОВАТЬ:

Или вы можете использовать более продвинутый подход с функциями Win API. Увидеть:

Функция CopyFileEx

Функция MoveFileEx

и другие

Другие вопросы по тегам