C/C++ 判斷資料夾是否存在以及建立、刪除資料夾 windows以及linux通用
阿新 • • 發佈:2019-02-14
參考:
##########################################################
判斷資料夾是否存在:
在windows環境下標頭檔案為:
#include <io.h>
在linux環境下標頭檔案為:
#include <unistd.h>
<pre name="code" class="cpp">int access(const char* _Filename, int _AccessMode)
上述函式在windows和linux環境下均可使用
該函式功能為確定檔案或資料夾的訪問許可權,如果指定的訪問許可權有效,則函式返回0,否則返回-1
Filename可以是檔案路徑,也可以是資料夾路徑,可以使用絕對路徑或相對路徑
_AccessMode表示要驗證的檔案訪問許可權,有可讀、可寫、可執行以及是否存在四種許可權,當Filename表示資料夾時僅能查詢資料夾是否存在
_AccessMode:
標頭檔案unistd.h中有如下定義:
#define R_OK 4 /* Test for read permission. */ #define W_OK 2 /* Test for write permission. */ #define X_OK 1 /* Test for execute permission. */ #define F_OK 0 /* Test for existence. */ 具體含義如下: R_OK 只判斷是否有讀許可權 W_OK 只判斷是否有寫許可權 X_OK 判斷是否有執行許可權 F_OK 只判斷是否存在 在巨集定義裡面分別對應: 00 只存在 02 寫許可權 04 讀許可權 06 讀和寫許可權
_AccessMode=00表示只判斷是否存在
_AccessMode=02表示檔案是否可執行
_AccessMode=04表示檔案是否可寫
_AccessMode=06表示檔案是否可讀
在windows環境下還可使用函式_access:
int _access(const char* _Filename, int _AccessMode)
###############
建立新的資料夾:
windows環境下標頭檔案為:
#include <direct.h>
函式原型為:
int mkdir(const char *_Path)
該函式功能為建立一個新的目錄,建立成功則返回0,否則返回-1
_Path:新建資料夾路徑,可使用絕對路徑,可也用相對路徑
windows環境下也可用函式_mkdir:
_mkdir(const char *_Path)
預設mode是0777,表示最大可能的訪問權
linux環境下標頭檔案為:
#include <sys/types.h>
#include <sys/stat.h>
函式原型為:
int mkdir(const char *pathname, mode_t mode);
該函式功能為建立一個新的目錄,並指定它的執行許可權。如果建立成功則返回0,否則,返回-1
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環境下標頭檔案:
#include <direct.h>
linux環境下標頭檔案:
#include <dirent.h>
函式原型為:
int rmdir(const char *_Path)
函式功能是刪除引數指定的資料夾,成功返回0,否則返回-1
在windows環境下也可使用函式_rmdir
######################
實現程式:
int main(void)
{
string dir="./hello";
if (access(dir.c_str(), 0) == -1)
{
cout<<dir<<" is not existing"<<endl;
cout<<"now make it"<<endl;
#ifdef WIN32
int flag=mkdir(dir.c_str());
#endif
#ifdef linux
int flag=mkdir(dir.c_str(), 0777);
#endif
if (flag == 0)
{
cout<<"make successfully"<<endl;
} else {
cout<<"make errorly"<<endl;
}
}
if (access(dir.c_str(), 0) == 0)
{
cout<<dir<<" exists"<<endl;
cout<<"now delete it"<<endl;
int flag=rmdir(dir.c_str());
if (flag == 0)
{
cout<<"delete it successfully"<<endl;
} else {
cout<<"delete it errorly"<<endl;
}
}
//cout<<"Hello World"<<endl;
cout<<"end..."<<endl;
cin.get();
return 0;
}