C++ 判断目录是否存在,新建,删除文件夹
在C++中标准库中直接对目录操作的函数好像没有(本人目前没找标准库中有),所以使用系统平台函数来对文件夹进行操作比较方便。
系统函数在Windows和Linux系统有一定的区别,主要区别其实是在于Linux对于文件夹的权限设置有硬性要求,而Windows中就没有。
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:
函数:int access( const char * _Filename, int _AccessMode)
头文件:io.h
linux:
函数:int access( const char * _Filename, int _AccessMode)
头文件:unistd.h
功能:确定文件和文件夹是否存在和访问权限 (_AccessMode参数:00表示只判断是否存在,02表示文件是否可执行, 04表示文件是否可写,06表示文件是否可读),有指定访问权限则返回0,否则函数返回-1
该函数在Linux原型一样,用法相同。
创建文件夹
windows:
函数:int mkdir(const char * _Path)
头文件:direct.h
linux:
函数:int mkdir(const char *pathname, mode_t mode)
头文件:sys/stat.h
功能:创建文件夹,返回0为创建成功,否则返回-1。Linux中创建时会有权限要求,该权限参数可以去了解Linux对于文件权限的设置相关内容,例如:0777表示对文件具有完全的权限。
删除文件夹
windows:
函数:int rmdir(const char *_Path)
头文件:direct.h
linux:
函数:int rmdir(const char *_Path)
头文件:sys/stat.h
功能:删除文件夹,成功返回0,否则-1。
样例
#include <iostream>
#include <string>
#ifdef _WIN32
#include <io.h>
#include <direct.h>
#else
#include <unistd.h>
#include <sys/stat.h>
#endif
using namespace std;
int main() {
string folder_path = "/home/amzing/test_folder";
if(access(folder_path.c_str(), 0)==0)cout<<folder_path<<" exist!"<<endl;
else cout<<folder_path<<" not exist!"<<endl;
int flag = mkdir(folder_path.c_str(), 00766);
if(flag==0)cout<<"create folder success!"<<endl;
else cout<<"create folder failed!"<<endl;
flag = rmdir(folder_path.c_str());
if(flag==0)cout<<"rm folder success!"<<endl;
else cout<<"rm folder failed!"<<endl;
return 0;
}