linux和Windows C++ 文件夹创建、删除
linux
// 创建、删除文件夹 void mkdir_output(const string &output_path){ if (access(output_path.c_str(), 0) == -1) { // mkdir(output_path.c_str(),S_IRUSR | S_IWUSR | S_IXUSR | S_IRWXG | S_IRWXO); system(("mkdir "+output_path).c_str()); std::cout<<output_path<<" create! "<<std::endl; } else { system(("rm -rf "+output_path).c_str()); system(("mkdir "+output_path).c_str()); std::cout<<output_path<<" recover create! "<<std::endl; } }
#include <sys/stat.h> #include <unistd.h> if (access(output_dir.toStdString().c_str(), F_OK) == -1) //如果文件夹不存在 { mkdir(output_dir.toStdString().c_str(), S_IRWXU | S_IRUSR | S_IWUSR | S_IXUSR | S_IRWXG | S_IRWXO); } else { terminal.execute("rm -rf " + output_dir); mkdir(output_dir.toStdString().c_str(), S_IRWXU | S_IRUSR | S_IWUSR | S_IXUSR | S_IRWXG | S_IRWXO); }
access函数在windows系统中在头文件<io.h>中,在Ubuntu系统中则是在<unistd.h>之中
函数原型:int _access(const char *pathname, int mode);
参数:pathname 为文件路径或目录路径 mode 为访问权限(在不同系统中可能用不能的宏定义重新定义)
返回值:如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1.
备注:当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限。
mode的值和含义如下所示:
00——只检查文件是否存在
02——写权限
04——读权限
06——读写权限
linux的mkdir #include <sys/stat.h>
linux的mkdir 函数原型如下:
int mkdir(const char *pathname, mode_t mode);
今天使用linux的mkdir创建目录。
函数说明:
mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。
返回值:
若目录创建成功,则返回0;否则返回-1,并将错误记录到全局变量errno中。
mode方式:
S_IRWXU | 00700权限,代表该文件所有者拥有读,写和执行操作的权限 |
S_IRUSR(S_IREAD) | 00400权限,代表该文件所有者拥有可读的权限 |
S_IWUSR(S_IWRITE) | 00200权限,代表该文件所有者拥有可写的权限 |
S_IXUSR(S_IEXEC) | 00100权限,代表该文件所有者拥有执行的权限 |
S_IRWXG | 00070权限,代表该文件用户组拥有读,写和执行操作的权限 |
S_IRGRP | 00040权限,代表该文件用户组拥有可读的权限 |
S_IWGRP | 00020权限,代表该文件用户组拥有可写的权限 |
S_IXGRP | 00010权限,代表该文件用户组拥有执行的权限 |
S_IRWXO | 00007权限,代表其他用户拥有读,写和执行操作的权限 |
S_IROTH | 00004权限,代表其他用户拥有可读的权限 |
S_IWOTH | 00002权限,代表其他用户拥有可写的权限 |
S_IXOTH | 00001权限,代表其他用户拥有执行的权限 |
Windows
// 创建、删除文件夹 windows //#include <io.h> // <io.h> if windows else <unistd.h> //#include <direct.h> void mk_dir(const string& path) { if (_access(path.c_str(), 0) == -1) { _mkdir(path.c_str()); std::cout << path << " create! " << std::endl; } else { //rmdir(path.c_str()); _mkdir(path.c_str()); std::cout << path << " recover create! " << std::endl; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构