Команда копирования Windows, например XCOPY, COPY, ROBOCOPY, не работает на языке C в System()

Я пишу этот код на языке C, где я сначала узнаю, что пользователь вошел в систему, а затем из AppData этого пользователя мне нужно скопировать некоторые файлы. Я могу найти, пользователь, я могу сгенерировать путь, но дело в том, что я не знаю, как скопировать папку и ее содержимое с помощью C, поэтому я подумал об использовании команд System(). Но теперь, если я использую команду COPY, он говорит, что путь неверен, хотя на самом деле он правильный и работает нормально, если я использую ту же команду в CMD. Также, если я использую XCOPY, он говорит, что команда не распознается как внутренняя или внешняя команда, в то время как XCOPY отлично работает с CMD.

Так может ли кто-нибудь сказать мне, как я могу скопировать папку и ее содержимое?

Я измельчаю части кодов, чтобы сгенерировать путь к файлу и команду копирования.

//making path variable
char path[100]; 
strcat(path,"C:\\Users\\");
strcat(path,username); //username is variable it gets value from function

strcat(path,"\\AppData\\Local\\Google\\Chrome\\*.*");
printf(path);


char command[100]; 
strcat(command,"copy ");
strcat(command,path);
strcat(command," D:\\myFolder");
printf("\n");
printf(command);
printf("\n");
system(command);

ОБНОВЛЕНИЕ

Вот мой полный код, может кто-нибудь заставить это работать?

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

int main()

{
//getting current user
TCHAR username[UNLEN+1];
DWORD len = UNLEN+1;
GetUserName(username, &len);
printf(username);
printf("\n");

//making path variable
char path[100]; 
strcpy(path,"C:\\Users\\");
strcat(path,username);

strcat(path,"\\AppData\\Local\\Google\\Chrome\\*.*");
printf(path);




//listing dir
DIR *dfd = opendir(path);
struct dirent *dp;
if(dfd != NULL) {
    while((dp = readdir(dfd)) != NULL)
        printf("%s\n", dp->d_name);
    closedir(dfd);
}

char command[100]; 
strcpy(command,"copy ");
strcat(command,path);
strcat(command," D:\\myFolder\\");
printf("\n");
printf(command);
printf("\n");
//sprintf(command, "copy %s/*.* D:/myfolder",path);
system(command);




return 0;
}

person user2192499    schedule 25.03.2013    source источник
comment
Не на всех компьютерах есть диск C:.   -  person SLaks    schedule 25.03.2013
comment
Большое спасибо за указание на это, я также включу проверку каталога установки Windows, но на данный момент диск Windows - C, но у меня проблема, упомянутая выше.   -  person user2192499    schedule 25.03.2013
comment
Такой же. fcopy не распознается как внутренняя или внешняя команда.   -  person user2192499    schedule 25.03.2013
comment
Я имел в виду это: stackoverflow.com/questions/1006797/   -  person McKracken    schedule 25.03.2013
comment
не должно ли быть что-то проще?   -  person user2192499    schedule 25.03.2013
comment
Вам следует рассмотреть возможность использования CopyFile или один из его родственников.   -  person zwol    schedule 25.03.2013
comment
Пожалуйста, не называйте функцию system System. C чувствителен к регистру. Когда вы пишете System, мы, вероятно, можем предположить, что вы имеете в виду system, но на самом деле это два совершенно разных идентификатора.   -  person Keith Thompson    schedule 25.03.2013


Ответы (1)


Вы используете неинициализированные массивы.

Изменять

strcat(path,"C:\\Users\\");
strcat(command,"copy ");

To

strcpy(path,"C:\\Users\\");
strcpy(command,"copy ");
person Valeri Atamaniouk    schedule 25.03.2013
comment
Я думаю, проблема все же в том, что я не могу скопировать все файлы и папки с помощью команды COPY, а XCOPY не работает, так что мне делать? - person user2192499; 26.03.2013
comment
copy не может скопировать каталог. Только файлы. На самом деле это команда оболочки CMD.exe, а не исполняемый файл. Пока вы используете system, это нормально. xcopy.exe — это программа, и вы можете ее выполнить. Проверьте переменные среды COMSPEC и PATH. msdn.microsoft.com/en-us/ библиотека/277bwbdz%28v=vs.100%29.aspx - person Valeri Atamaniouk; 26.03.2013