windows平台下移动非空的目录(C++实现)

2018年7月20日 129点热度 0人点赞 0条评论

已经存在的情况没有考虑,这种情况会删除目录失败的,自己处理一下吧。

#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(&amp;FindFileData, sizeof(FindFileData));
    HANDLE hListFile;
    char szFilePath[MAX_PATH];
    strcpy(szFilePath, szsPath);
    strcat(szFilePath, "\\*");
    hListFile = FindFirstFileA(szFilePath, &amp;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 &amp; FILE_ATTRIBUTE_DIRECTORY)
        {
            MoveDir(szsFilePathSub, szdFilePathSub);
        }else{
            //移动文件
            MoveFileA(szsFilePathSub, szdFilePathSub);
        }
    } while (FindNextFileA(hListFile, &amp;FindFileData));
    FindClose(hListFile);
    RemoveDirectoryA(szsPath);
    return 0;
}

 

Stupid

一个人用自己的船将他人送到彼岸,那他自己也到达了彼岸。

文章评论