2015-03-04 2 views
0

Мне нужно скопировать файлы из определенного каталога в другой, я в той части, где я выделяю 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; 
} 

EDIT:

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

CopyFileEx function

MoveFileEx function

и другие