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; } }
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; } }
