在项目中经常会用到整目录复制的功能,windows的API只能支持到单文件的copy,自己写了一个:
BOOL CopyFiles(CString szSrcDir, CString szDestDir, BOOL bfailIfExists)
{
CFileFind finder;
if (!PathIsDirectory(szSrcDir))
{
return FALSE;
}
BOOL bExists = finder.FindFile(szSrcDir + _T("*.*"));
while(bExists)
{
bExists = finder.FindNextFile();
CString csFileName = finder.GetFileName();
if (finder.IsDots())
{
continue;
}
if (finder.IsDirectory())
{
int bRet = SHCreateDirectoryEx(NULL,szDestDir+csFileName,NULL);
if (bRet == ERROR_SUCCESS || bRet == ERROR_ALREADY_EXISTS)
{
BOOL bRet = CopyFiles(szSrcDir+csFileName+_T("\\"), szDestDir+csFileName+_T("\\"), bfailIfExists);
if (!bRet)
{
return FALSE;
}
}
}
else
{
BOOL bRet =CopyFile(szSrcDir+csFileName, szDestDir+csFileName, bfailIfExists);
if (!bRet)
{
return FALSE;
}
}
}
return TRUE;
}
共有三个参数, 第一个是源目录,第二个是目标目录,第三个是文件存在时是否复制。
这个函数只能用来copy整个目录,不能用来copy单文件,单文件还是使用windows的API(CopyFile)。