관리 메뉴

드럼치는 프로그래머

[API/MFC] SHFileOperation, SHFILEOPSTRUCT, WIN32_FIND_DATA, 본문

★─Programing/☆─API | MFC

[API/MFC] SHFileOperation, SHFILEOPSTRUCT, WIN32_FIND_DATA,

드럼치는한동이 2011. 5. 24. 17:13

SHFileOperation, SHFILEOPSTRUCT, WIN32_FIND_DATA을 이용하여 폴더와 파일 이동 시키기

#define FromPathName "C:\\Util\\HY"  // 옮겨질 디렉토리 경로
#define ToPathName  "C:\\Util"  // 옮길 디렉토리 정보

TCHAR fromPath[MAX_PATH+2];
TCHAR toPath[MAX_PATH+2]; 
 
memset(toPath , 0 , sizeof(toPath));
lstrcpy(toPath , ToPathName);
 
 HANDLE          hFind = NULL;
 WIN32_FIND_DATA dataFind;
 BOOL            bMoreFile = TRUE;
 SHFILEOPSTRUCT shfo = {0};
 
 CString tempPath;
 tempPath.Format("%s\\*.*", FromPathName);

 hFind = FindFirstFile(tempPath, &dataFind);
 
 while(bMoreFile)
  
 {
  if((strcmp(dataFind.cFileName, ".") == 0 || strcmp(dataFind.cFileName, "..") == 0)) ;
  
  else 
  {
   memset(fromPath , 0 , sizeof(fromPath));
   
   CString SelectPath;
   SelectPath.Format("%s\\%s", FromPathName, dataFind.cFileName);
   
   lstrcpy(fromPath , SelectPath);
   
   ZeroMemory(&shfo , sizeof shfo);
   shfo.hwnd = AfxGetMainWnd()->m_hWnd;
   
   shfo.wFunc = FO_MOVE; // FO_COPY, FO_DELETE, FO_MOVE

   shfo.fFlags = NULL;     // FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION;
   shfo.lpszProgressTitle = "파일/폴더 복사";
   shfo.fAnyOperationsAborted = false;
   shfo.pTo = toPath;
   shfo.pFrom = fromPath;
   
   int nResult = SHFileOperation(&shfo);
   
   if(nResult != 0)        // 실패일 경우 (0 이면 성공)
    break; 
  }
  
  bMoreFile = FindNextFile(hFind, &dataFind);
 }
 
 FindClose(hFind);
 
 RemoveDirectory(FromPathName);

 exit(0);

Comments