zoukankan      html  css  js  c++  java
  • 根据CreateDirectory递归创建多级目录

    分为MFC下的和非MFC下的两种,MFC路径是CString类型的,非MFC的路径是wstring类型的。

    下面是MFC下的创建目录:

    void __fastcall RecursiveDirectory(CString cstrDir) // 递归创建目录
    {
        if (cstrDir.GetLength() <= 3)//是根目录,无需创建目录
        {
            return;
        }
        if (cstrDir[cstrDir.GetLength()-1] == '\')   // 将路径改为目录
        {
            cstrDir.Delete(cstrDir.GetLength()-1, 1);
        }
        // 修改文件属性
        WIN32_FIND_DATA wfd;
        HANDLE hFind = FindFirstFile(cstrDir, &wfd); // 查找
        if (hFind != INVALID_HANDLE_VALUE)
        {
            FindClose(hFind);
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                return;
        }
        // 创建当前目录的地目录失败
        if (CreateDirectory(cstrDir,NULL) == false)
        {// 退到上一级目录
            CString wstrNewDir = cstrDir;
            int n = wstrNewDir.ReverseFind('\');
            wstrNewDir = cstrDir.Left(n);
            
            // 递归进入
            RecursiveDirectory(wstrNewDir);  // 递归本函数,再创建目录
            // 递归退出后创建之前失败的目录
            CreateDirectory(cstrDir,NULL);  // 递归返回,在存在的目录上再建目录
        }// 多级目录创建成功
    }

    下面是非MFC的创建目录:

    void __fastcall RecursiveDirectory(wstring wstrDir) // 创建复目录
    {
        if (wstrDir.length() <= 3)//是根目录,无需创建目录
        {
            return;
        }
        if (wstrDir[wstrDir.length() - 1] == '\')   // 将路径改为目录
        {
            wstrDir.erase(wstrDir.end() - 1);
        }
        // 修改文件属性
        WIN32_FIND_DATA wfd;
        HANDLE hFind = FindFirstFile(wstrDir.c_str(), &wfd); // 查找
        if (hFind != INVALID_HANDLE_VALUE)
        {
            FindClose(hFind);
            if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
                return;
        }
        // 创建当前目录的地目录失败
        if (CreateDirectory(wstrDir.c_str(), NULL) == false)
        {// 退到上一级目录
            wstring wstrNewDir = wstrDir;
            while (wstrNewDir[wstrNewDir.length()-1] != '\')     // 撤到当前目录的上一个目录
            {
                wstrNewDir.erase(wstrNewDir.length() - 1);
            }
            // delete '\' 
            wstrNewDir.erase(wstrNewDir.length() - 1); // delete '\' 
            // 递归进入
            RecursiveDirectory(wstrNewDir);  // 递归本函数,再创建目录
            // 递归退出后创建之前失败的目录
            CreateDirectory(wstrDir.c_str(), NULL);  // 递归返回,在存在的目录上再建目录
        }// 多级目录创建成功
    }
  • 相关阅读:
    第一次作业
    第0次作业—姚舜禹17-1
    第三周作业
    第二周作业
    第一周作业
    第零周作业
    第三周作业
    第二周作业
    第一周作业
    第0次作业
  • 原文地址:https://www.cnblogs.com/Uthinker/p/5806464.html
Copyright © 2011-2022 走看看