linux 判斷目錄是否存在並建立
1 用 int access(const char *pathname, int mode); 判斷有沒有此檔案或目錄 --它區別不出這是檔案還是目錄
2 用 int stat(const char *file_name, struct stat *buf); 判斷該檔案或目錄是否否存在 ;得到st_mode,然後判斷是不是目錄檔案。
stat()系統呼叫看是否成功,不成功就不存在,成功判斷返回的st_mode是否是一個資料夾。
********************************************************************
linux c關於目錄是否存在,新建目錄等操作
1. 建立目錄
#include <sys/stat.h>
#include <sys/types.h>
int mkdir(const char *pathname, mode_t mode);
運用條件:只能在已存在的目錄下建立一級子目錄
返回值: 返回0表示成功,返回-1表述出錯。
mode 表示新目錄的許可權,可以取以下值:
其中,mode就用0777,0755這種形式。
2. 判斷一個目錄是否存在
可以使用opendir來判斷,這是比較簡單的辦法。
#include <sys/types.h>
#include <dirent.h>
DIR *opendir(const char *name);
The opendir() function opens a directory stream corresponding to the directory name, and returns a pointer to the directory
stream. The stream is positioned at the first entry in the directory.
程式碼
#include <sys/types.h>
#include <sys/stat.h>
#include <dirent.h>
#include <cstddef>
int main()
{
if(NULL==opendir("/d1/liujian/readdb/adTest/data/html"))
mkdir("/d1/liujian/readdb/adTest/data/html",0775);
return 0;
}
以上程式碼可以測試一個目錄是否存在,如果不存在就建立這個目錄。
***********************************
#include<stdio.h>
#include<string.h>
#include<errno.h>
#include<unistd.h>
#include<dirent.h>
#include<sys/types.h>
#include<sys/stat.h>
extern int errno;
#define MODE (S_IRWXU | S_IRWXG | S_IRWXO)
int mk_dir(char *dir)
{
DIR *mydir = NULL;
if((mydir= opendir(dir))==NULL)//判斷目錄
{
int ret = mkdir(dir, MODE);//建立目錄
if (ret != 0)
{
return -1;
}
printf("%s created sucess!/n", dir);
}
else
{
printf("%s exist!/n", dir);
}
return 0;
}
int mk_all_dir(char *dir)
{
bool flag = true;
char *pDir = dir;
while (flag)
{
char *pIndex = index(pDir, '/');
if (pIndex != NULL && pIndex != dir)
{
char buffer[512] = {0};
int msg_size = pIndex - dir;
memcpy(buffer, dir, msg_size);
int ret = mk_dir(buffer);
if (ret < 0)
{
printf("%s created failed!/n", dir);
}
}
else if (pIndex == NULL && pDir == dir)
{
printf("dir is not directory!/n");
return -1;
}
else if (pIndex == NULL && pDir != dir)
{
int ret = mk_dir(dir);
if (ret < 0)
{
printf("%s created failed!/n", dir);
}
break;
}
pDir = pIndex+1;
}
return 0;
}
int main()
{
char buffer[512] = {0};
printf("please input path mane/n");
fgets(buffer, sizeof(buffer), stdin);
char *pIndex = index(buffer, '/n');
if (pIndex != NULL)
{
*pIndex = '/0';
}
printf("check path mane %s/n", buffer);
int ret = mk_all_dir(buffer);
if (ret < 0)
{
printf("% mkdir failed!/n", buffer);
return -1;
}
return 0;
}