1. 程式人生 > >C/C++ 判斷資料夾是否存在以及建立、刪除資料夾 windows以及linux通用

C/C++ 判斷資料夾是否存在以及建立、刪除資料夾 windows以及linux通用

參考:

##########################################################

判斷資料夾是否存在:

在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許可權,代表其他使用者擁有執行的許可權
可疊加使用,如0755表示S_IRWXU|S_IRGRP|S_IXGRP|S_IROTH|S_IXOTH。表示該檔案所有者擁有讀,寫和執行操作許可權去,該檔案使用者組擁有可讀,可執行的許可權,其他使用者擁有可讀,可執行的許可權。

#################################################

刪除資料夾:

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