/// <summary>
/// 拷贝文件
/// </summary>
/// <param name="srcFile"></param>
/// <param name="destFile"></param>
/// <returns></returns>
int FastCopyFile(const char* srcFile, const char* destFile) {
if (nullptr == srcFile || nullptr == destFile)
{
return -1;
}
try
{
//文件复制,路径必须以"\0"即空为结尾
std::string src = srcFile + '\0\0';
std::string dest = destFile + '\0\0';
SHFILEOPSTRUCTA fop;
ZeroMemory(&fop, sizeof fop);
fop.wFunc = FO_COPY;
fop.pFrom = src.c_str();
fop.pTo = dest.c_str();
//不显示提示或错误对话框
fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
int ret = SHFileOperationA(&fop);
return ret;
}
catch (const std::exception&)
{
return -1;
}
}
/// <summary>
/// 重命名文件
/// </summary>
/// <param name="srcFile"></param>
/// <param name="destFile"></param>
/// <returns></returns>
int RenameFile(char* srcFile, char* destFile) {
if (nullptr == srcFile || nullptr == destFile)
{
return -1;
}
try
{
SHFILEOPSTRUCTA fop;
ZeroMemory(&fop, sizeof fop);
fop.wFunc = FO_RENAME;
fop.pFrom = srcFile;
fop.pTo = destFile;
//不显示提示或错误对话框
fop.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_NOCONFIRMMKDIR;
int ret = SHFileOperationA(&fop);
return ret;
}
catch (const std::exception&)
{
return -1;
}
}
/// <summary>
/// 拷贝文件夹,包含文件
/// </summary>
/// <param name="srcDir"></param>
/// <param name="destDir"></param>
/// <returns></returns>
int CopyDirectory(const char* srcDir, const char* destDir) {
if (nullptr == srcDir || nullptr == destDir)
{
return -1;
}
try
{
HANDLE hFile;
WIN32_FIND_DATAA wfd; //数据结构;
char sz_path[MAX_PATH] = { 0 };
char buf[MAX_PATH * 2] = { 0 };
char fileName[MAX_PATH] = { 0 };
char temp[MAX_PATH] = { 0 };//临时数组;
char parseFileName[MAX_PATH] = { 0 };
strcpy_s(sz_path, srcDir);
strcat_s(sz_path, "\\*.*"); //匹配任何文件包括文件夹目录;
hFile = FindFirstFileA(sz_path, &wfd);
if (hFile != INVALID_HANDLE_VALUE)
{
do
{
if (wfd.cFileName[0] == '.') //如果是.或..则过滤;
continue;
else if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) //如果是目录则递归;
{
strcpy_s(sz_path, srcDir);
strcat_s(sz_path, "\\");
strcat_s(sz_path, wfd.cFileName); //拼接目录全路径名;
FastCopyFile(sz_path, destDir);
}
else
{
strcpy_s(sz_path, srcDir);
strcat_s(sz_path, "\\");
strcat_s(sz_path, wfd.cFileName); //拼接目录全路径名;
FastCopyFile(sz_path, destDir);
}
} while (FindNextFileA(hFile, &wfd));
}
return 0;
}
catch (const std::exception&)
{
return -1;
}
}
关于SHFileOperation函数的补充