c判断目录是否存在,不存在则创建目录_mkdir父目录不存在先创建父目录

c判断目录是否存在,不存在则创建目录_mkdir父目录不存在先创建父目录Linux下mkdir函数头文件库: #include #include   函数原型: intmkdir(constchar*pathname,mode_tmode); 函数说明: mkdir()函数以mode方式创建一个以参数pathname命名的目录,mode定义新创建目录的权限。

Linux下mkdir函数
头文件库:

 

#include <sys/stat.h>

 

#include <sys/types.h>

 

  函数原型:

 

int mkdir(const char *pathname, mode_t mode);

 

函数说明:

 

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权限,代表其他用户拥有执行的权限


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

 

以上代码可以测试一个目录是否存在,如果不存在就创建这个目录。

  1. ***********************************  
  2.   
  3. #include<stdio.h>  
  4. #include<string.h>  
  5. #include<errno.h>  
  6.   
  7. #include<unistd.h>  
  8.   
  9. #include<dirent.h>  
  10. #include<sys/types.h>  
  11. #include<sys/stat.h>  
  12.   
  13. extern int errno;  
  14.   
  15. #define MODE (S_IRWXU | S_IRWXG | S_IRWXO)  
  16.   
  17. int mk_dir(char *dir)  
  18. {  
  19.     DIR *mydir = NULL;  
  20.     if((mydir= opendir(dir))==NULL)//判断目录   
  21.     {  
  22.       int ret = mkdir(dir, MODE);//创建目录  
  23.       if (ret != 0)  
  24.       {  
  25.           return -1;  
  26.       }  
  27.       printf("%s created sucess!/n", dir);  
  28.     }  
  29.     else  
  30.     {  
  31.         printf("%s exist!/n", dir);  
  32.     }  
  33.   
  34.     return 0;  
  35. }  
  36.   
  37. int mk_all_dir(char *dir)  
  38. {  
  39.     bool flag = true;  
  40.     char *pDir = dir;  
  41.     while (flag)  
  42.     {  
  43.         char *pIndex = index(pDir, '/');  
  44.         if (pIndex != NULL && pIndex != dir)  
  45.         {  
  46.             char buffer[512] = {0};  
  47.             int msg_size = pIndex - dir;  
  48.             memcpy(buffer, dir, msg_size);  
  49.             int ret = mk_dir(buffer);  
  50.             if (ret < 0)  
  51.             {  
  52.                 printf("%s created failed!/n", dir);  
  53.             }  
  54.         }  
  55.         else if (pIndex == NULL && pDir == dir)  
  56.         {  
  57.             printf("dir is not directory!/n");  
  58.             return -1;  
  59.         }  
  60.         else if (pIndex == NULL && pDir != dir)  
  61.         {  
  62.             int ret = mk_dir(dir);  
  63.             if (ret < 0)  
  64.             {  
  65.                 printf("%s created failed!/n", dir);  
  66.             }  
  67.   
  68.             break;  
  69.         }  
  70.   
  71.         pDir = pIndex+1;  
  72.   
  73.     }  
  74.   
  75.     return 0;  
  76. }  
  77.   
  78.    
  79.   
  80. int main()  
  81. {  
  82.     char buffer[512] = {0};  
  83.     printf("please input path mane/n");  
  84.     fgets(buffer, sizeof(buffer), stdin);  
  85.       
  86.     char *pIndex = index(buffer, '/n');  
  87.     if (pIndex != NULL)  
  88.     {  
  89.         *pIndex = '/0';  
  90.     }  
  91.   
  92.     printf("check path mane %s/n", buffer);  
  93.   
  94.     int ret = mk_all_dir(buffer);  
  95.     if (ret < 0)  
  96.     {  
  97.         printf("% mkdir failed!/n", buffer);  
  98.         return -1;  
  99.     }  
  100.   
  101.     return 0;  
  102. }  
本文来源幽雨雨幽,由架构君转载发布,观点不代表Java架构师必看的立场,转载请标明来源出处:https://javajgs.com/archives/165909
0
 

发表评论