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;
}
文章目录