已经存在的情况没有考虑,这种情况会删除目录失败的,自己处理一下吧。
#include <windows.h>
#include <shlwapi.h>
#pragma comment(lib, "Shlwapi.lib")
DWORD MoveDir(const char* szsPath, const char* szdPath)
{
//如果要移动到的目录不存在
if (!PathFileExistsA(szdPath)) {
if (!CreateDirectoryA(szdPath, NULL)){
return 2;
}
}
WIN32_FIND_DATAA FindFileData;
ZeroMemory(&FindFileData, sizeof(FindFileData));
HANDLE hListFile;
char szFilePath[MAX_PATH];
strcpy(szFilePath, szsPath);
strcat(szFilePath, "\\*");
hListFile = FindFirstFileA(szFilePath, &FindFileData);
if (hListFile == INVALID_HANDLE_VALUE)
{
return 1;
}
do
{
//如果是.或者..那么继续遍历
if (strcmp(FindFileData.cFileName, ".") == 0 ||
strcmp(FindFileData.cFileName, "..") == 0)
{
continue;
}
char szsFilePathSub[MAX_PATH];
//拼接这个目录的名字
strcpy(szsFilePathSub, szsPath);
strcat(szsFilePathSub, "\\");
strcat(szsFilePathSub, FindFileData.cFileName);
//拼接新的目录的名字
char szdFilePathSub[MAX_PATH];
strcpy(szdFilePathSub, szdPath);
strcat(szdFilePathSub, "\\");
strcat(szdFilePathSub, FindFileData.cFileName);
//如果是目录,那么移动该目录
if (FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
MoveDir(szsFilePathSub, szdFilePathSub);
}else{
//移动文件
MoveFileA(szsFilePathSub, szdFilePathSub);
}
} while (FindNextFileA(hListFile, &FindFileData));
FindClose(hListFile);
RemoveDirectoryA(szsPath);
return 0;
}
