根据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); // 递归返回,在存在的目录上再建目录 }// 多级目录创建成功 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库