2008年10月10日金曜日

[ VC++ ] VC++でフォルダ丸をごとコピーする方法

Windows用のプログラムです。

C++でのフォルダ丸ごとコピーの方法。
私は以下のような関数を作って、fromに元のパス名、toにコピー先のパス名を入力するようにしています。

WindowsAPIを使っているので、CString部分をTCHARとかで書き換えればVC以外でも動くはず。

ソース。
  1. int folderCopy( CString from, CString to )  
  2. {  
  3.    SHFILEOPSTRUCT tSHFile;  
  4.    tSHFile.hwnd = ::GetDesktopWindow();  
  5.    tSHFile.wFunc = FO_COPY;  
  6.    tSHFile.fFlags = FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI;  
  7.    tSHFile.fAnyOperationsAborted = TRUE;  
  8.    tSHFile.hNameMappings = NULL;  
  9.    tSHFile.lpszProgressTitle = "";  
  10.   
  11.    // パス名のCStringの末尾に\0をつけて設定  
  12.    from += "0";  
  13.    to += "0";  
  14.    from.SetAt( from.GetLength()-1, NULL );  
  15.    to.SetAt( to.GetLength()-1, NULL );  
  16.    tSHFile.pFrom = from;  
  17.    tSHFile.pTo = to;  
  18.   
  19.    return SHFileOperation( &tSHFile ); // 実行  
  20. }  

こんな感じで。