2008年10月10日金曜日

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

Windows用のプログラムです。

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

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

ソース。
int folderCopy( CString from, CString to )
{
SHFILEOPSTRUCT tSHFile;
tSHFile.hwnd = ::GetDesktopWindow();
tSHFile.wFunc = FO_COPY;
tSHFile.fFlags = FOF_SILENT | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI;
tSHFile.fAnyOperationsAborted = TRUE;
tSHFile.hNameMappings = NULL;
tSHFile.lpszProgressTitle = "";

// パス名のCStringの末尾に\0をつけて設定
from += "0";
to += "0";
from.SetAt( from.GetLength()-1, NULL );
to.SetAt( to.GetLength()-1, NULL );
tSHFile.pFrom = from;
tSHFile.pTo = to;

return SHFileOperation( &tSHFile ); // 実行
}

こんな感じで。