Подождите, пока все файлы не будут скопированы? - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь найти способ подождать, пока xcopy cmd закончит копирование файлов с диска. Я пробовал 2 способа. Первый способ - это в основном ожидание hprocess от созданного процесса.

Но это waitForSingleObject никогда не разрешается.

void copyFileWait(){

  STARTinfP777.cb = sizeof(STARTinfP777);
  char allCmd[MAX_PATH] = "C:\\Windows\\System32\\cmd.exe /k copy /y \""; // = drive letter; xcopy working fine
  printf("%s\n", allCmd);

  DWORD safsdkasf = 0;
  if(CreateProcess(NULL, allCmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &STARTinfP777, &procInf7777) == 0){

    printf("%d\n", GetLastError());
    MessageBox(0, "Hata", "Dikkat!", MB_OK);
    exit(0);
  }
  WaitForSingleObject( procInf7777.hProcess, INFINITE );
  CloseHandle( procInf7777.hProcess );
  CloseHandle( procInf7777.hThread );

}

В этой функции я проверяю код выхода процесса после запуска с GetExitCodeProcess(), а также установить таймер на код. Но это всегда равно 259 Я не замечаю никаких изменений даже после того, как файлы полностью записаны.

 void copyFileWait();
void gggPaths();
DWORD WINAPI GetDirsSEVENthreadFunc ();

//void cpyToPES(char fromWhereToCopy[MAX_PATH]);

char *WndCmpath = "C:\\Windows\\System32\\cmd.exe ";

HANDLE fileCopierHandle;
int Nprocess = 0;

STARTUPINFO STARTinfP777 = {0};
PROCESS_INFORMATION procInf7777 = {0};
DWORD exitcode;

int main(){

    gggPaths();

    //copyFileWait();

    DWORD threadCPYFilesID;
    fileCopierHandle=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)GetDirsSEVENthreadFunc,(LPVOID)10,0,&threadCPYFilesID); //updating 0 olana kadar bekler
    WaitForSingleObject(fileCopierHandle,INFINITE);

    printf("done.");
    return 0;
}

void copyFileWait(){

  STARTinfP777.cb = sizeof(STARTinfP777);
    char allCmd[MAX_PATH] = "C:\\Windows\\System32\\cmd.exe /k copy /y \""; // = drive letter; //xcopy files  bla bla works fine
    printf("%s\n", allCmd);



  DWORD safsdkasf = 0;
  if(exitcode != 259){
      if(CreateProcess(NULL, allCmd, NULL, NULL, FALSE, NORMAL_PRIORITY_CLASS | CREATE_NO_WINDOW, NULL, NULL, &STARTinfP777, &procInf7777) == 0){

        printf("%d\n", GetLastError());
        MessageBox(0, "Hata", "Dikkat!", MB_OK);
        exit(0);
      }
  }

  BOOL result = GetExitCodeProcess(procInf7777.hProcess, &exitcode);
  if(!result){
      memset( &STARTinfP777, '\0', sizeof STARTinfP777 );
      memset( &procInf7777, '\0', sizeof procInf7777 );
      printf("damn..\n");
      printf("%d\n", GetLastError());
  }else{

  }
  printf("exitcode => %d", exitcode);
  //if() exıtcode TASK_COMPLETE forexample... kill timer etc.
}


DWORD WINAPI GetDirsSEVENthreadFunc (){
  HWND tempHW;
  SetTimer(tempHW, 0, 5500,(TIMERPROC) &copyFileWait);
  MSG msg;
  while(GetMessage(&msg, NULL, 0, 0)){
   TranslateMessage(&msg);
   DispatchMessage(&msg);
 }
}

Каков был бы способ выполнить sh эту задачу?

Я попытался CopyFile() Но он не нашел пути, когда я связал другие буквы тома или внешние устройства. Над которой я работаю.

1 Ответ

1 голос
/ 18 февраля 2020

Переключение /k на /c решило проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...