日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

判断目录是否存在并创建mkdir

發布時間:2024/2/28 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 判断目录是否存在并创建mkdir 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

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_IRWXU00700權限,代表該文件所有者擁有讀,寫和執行操作的權限
S_IRUSR(S_IREAD)00400權限,代表該文件所有者擁有可讀的權限
S_IWUSR(S_IWRITE)00200權限,代表該文件所有者擁有可寫的權限
S_IXUSR(S_IEXEC)00100權限,代表該文件所有者擁有執行的權限
S_IRWXG00070權限,代表該文件用戶組擁有讀,寫和執行操作的權限
S_IRGRP00040權限,代表該文件用戶組擁有可讀的權限
S_IWGRP00020權限,代表該文件用戶組擁有可寫的權限
S_IXGRP00010權限,代表該文件用戶組擁有執行的權限
S_IRWXO00007權限,代表其他用戶擁有讀,寫和執行操作的權限
S_IROTH00004權限,代表其他用戶擁有可讀的權限
S_IWOTH00002權限,代表其他用戶擁有可寫的權限
S_IXOTH00001權限,代表其他用戶擁有執行的權限


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

?

以上代碼可以測試一個目錄是否存在,如果不存在就創建這個目錄。

[cpp]?view plaincopyprint?
  • ***********************************??
  • ??
  • #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;??
  • } ?
  • 總結

    以上是生活随笔為你收集整理的判断目录是否存在并创建mkdir的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。