创建目录
/* 功能:创建多级目录 参数:dir必须是绝对路径 调用: char dir[] = "E:\\Demo\\Folder\\subFolder\\my2\\test.png"; char dir[] = "E:\\Demo\\Folder\\subFolder\\my2\\"; char dir[] = "E:\\Demo\\Folder\\subFolder\\my2"; CreateDir(dir); */ void CreateDir(const char *dir) { int m = 0, n; string str1, str2; str1 = dir; str2 = str1.substr(0, 2); str1 = str1.substr(3, str1.size()); while (m >= 0) { m = str1.find('\\'); str2 += '\\' + str1.substr(0, m); n = _access(str2.c_str(), 0); //判断该目录是否存在 if (n == -1) { _mkdir(str2.c_str()); //创建目录 } str1 = str1.substr(m + 1, str1.size()); } } //char dir[] = "E:\\Demo\\Folder\\subFolder\\my2"; //CreateDir(dir); //_mkdir(".\\123\\abc"); // 无法创建多级 //char dir[] = ".\\123a\\123b"; // 在当前目录下创建123a目录 //char dir[] = ".\\123a\\123b\\"; // 在当前目录下创建123a\\123b目录 //char dir[] = "124a"; // 没创建目录 //char dir[] = "124a\\"; // 在当前目录下创建124a目录 char dir[] = ".\\123a\\123b\\123.png"; // 在当前目录下创建123a\\123b目录 /* 函数作用 该函数的作用是检查指定目录是否存在,如果不存在则创建整个Dirpath所表示的整个目录。 这个函数并不存在于 Kernel32.dll 中,需要包含头文件imagehlp.h,并链接imagehlp.lib。 参数 Dirpath:要检查的目录名。如果是路径不是文件名,需以 '\' 结尾。 返回值 如果目录存在,返回TRUE;如果不存在但全部路径创建成功,返回TRUE; 如果不存在且创建失败,返回FALSE。 atips: 只创建最后一个\\之前的目录路径,当前和绝对路径都支持 */ BOOL bRet = MakeSureDirectoryPathExists(dir); msg.Format("create = %d", bRet); AfxMessageBox(msg);
参考:
https://www.cnblogs.com/vincent2012/p/3321027.html
https://blog.csdn.net/qq0824/article/details/52387020
int ToMakeDirs(const char *path){
int i; char* pszDir; int len; int iRet; if(path == NULL || strlen(path) == 0 ) return -1; pszDir = strdup(path); len = strlen(pszDir); for(i = 1; i < len; ++i) { if (pszDir[i] == '\\' || pszDir[i] == '/') { pszDir[i] = '\0'; iRet = _access(pszDir, 0); if(iRet != 0) { iRet = _mkdir(pszDir); if(iRet != 0) { free(pszDir); return i; } } pszDir[i] = '/'; } } if(_access(pszDir, 0) != 0) { iRet = _mkdir(pszDir); if(iRet != 0) { free(pszDir); return -2; } } free(pszDir); return 0; }
测试情况:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | char path[300]; #if 0 sprintf (path, "mf1443" ); // // 当前路径下创建 mf1443 sprintf (path, ".\\" ); // 当前目录可以访问不会创建 sprintf (path, ".\\myf1353" ); // 当前路径下创建 myf1353 sprintf (path, ".\\myf1353\\" ); // 当前路径下创建 myf1353 sprintf (path, ".\\myf1353\\cd1353" ); // 当前路径下创建多级目录 myf1353\\cd1353 sprintf (path, ".\\myf1353\\myf1353.txt" ); //! 会当前路径下创建目录名为 myf1353.txt 的目录 sprintf (path, ".\\.." ); //当前目录的上一级目录可以访问不会创建 sprintf (path, ".\\..\\myf1419" ); // 在上一级目录创建 myf1419 #elif 0 sprintf (path, "..\\myf1357" ); // 在上一级目录创建 myf1357 sprintf (path, "..\\myf1357\\myf1357" ); // 在上一级目录创建多级目录 myf1357\\myf1357 sprintf (path, "../myf1357\\myf1357" ); // 在上一级目录创建多级目录 myf1357\\myf1357 sprintf (path, "../myf1357/myf1357" ); // 在上一级目录创建多级目录 myf1357\\myf1357 sprintf (path, "..\\myf1357/myf1357" ); //在上一级目录创建多级目录 myf1357\\myf1357 sprintf (path, "..\myf1357/myf1357" ); //! 会当前目录创建 ..myf1357\\myf1357 (\不合法) sprintf (path, "..\\..\\myf1419\\myf1419" ); // 在上一级的上一级下创建多级目录 #else sprintf (path, "c:\\myf1353.txt" ); // 在c盘创建myf1353.txt目录 sprintf (path, "f:\\myf1353" ); // f盘不存在无法创建 sprintf (path, "d:\\.." ); // 什么鬼,不会创建 sprintf (path, "d:\\..myf1353" ); // d盘下创建..myf1353目录 sprintf (path, "d:\\.myf1353" ); // d盘下创建.myf1353目录 #endif int iRet = ToMakeDirs(path); |
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 内存占用高分析
· .NET Core GC计划阶段(plan_phase)底层原理浅谈
· .NET开发智能桌面机器人:用.NET IoT库编写驱动控制两个屏幕
· 用纯.NET开发并制作一个智能桌面机器人:从.NET IoT入门开始
· 一个超经典 WinForm,WPF 卡死问题的终极反思
· 在 Windows 10 上实现免密码 SSH 登录
· C#中如何使用异步编程
· SQL Server 内存占用高分析及解决办法(超详细)
· ffmpeg简易播放器(1)--了解视频格式
· 20250116 支付宝出现重大事故 有感