判断目录是否存在并创建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;
}

 

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

***********************************

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


<think>好的,用户想知道如何用Python判断目录是否存在创建它。首先,我需要回忆一下Python中处理文件和目录的模块,应该是os或者pathlib。记得os模块有os.path.exists和os.makedirs函数,可以检查路径是否存在以及创建目录。而pathlib是Python 3.4之后引入的,用起来更面向对象,可能更简洁。 接下来,用户可能需要两种方法的示例,所以我要分别写os和pathlib的实现。比如,用os的话,先检查路径是否存在,如果不存在创建。这里要注意,os.makedirs可以创建多级目录,而exist_ok参数在Python 3.2之后支持,避免目录存在时的异常。 然后是pathlib的方法,Path对象的mkdir方法也有parents和exist_ok参数,设置parents=True可以创建目录,exist_ok=True避免异常。这样代码会更简洁。 另外,用户可能关心异常处理,比如权限问题或者其他错误,但用户的问题没有提到需要处理异常,所以可能暂时不需要深入。但最好还是提一下,比如在os.makedirs时如果目录被其他进程创建了,可能会有异常,但使用exist_ok=True就可以忽略。 还要注意路径字符串的正确性,比如使用正斜杠或反斜杠,在Windows下可能需要转义,但用Python的raw字符串或者双反斜杠处理。不过使用os.path.join或者pathlib可以自动处理路径分隔符,这样更安全。 现在检查是否有相关的引用内容。用户提供的引用中,引用[2]提到了shutil.rmtree删除目录,可能相关,但这里的问题是关于创建目录。引用[4]提到了批量处理脚本,可能涉及目录操作,但具体没有直接相关的信息。所以可能不需要引用这些内容,但如果有必要的话可以看看。比如,引用[2]中的错误可能是因为尝试删除文件而不是目录,所以确保用户创建的是目录而不是文件,但用户的问题主要是判断存在创建,可能不需要处理删除的情况。 总结下来,步骤应该是:导入模块,检查路径是否存在,不存在创建。给出两种方法,说明推荐pathlib因为更现代。同时提到exist_ok参数的重要性,避免报错。可能还要提到跨平台兼容性,因为os和pathlib都能处理不同系统的路径。 最后生成相关问题,比如如何递归创建多级目录,检查是文件还是目录,处理权限问题,或者如何遍历目录。这些都与目录操作相关,能帮助用户进一步学习。</think>在Python中判断目录是否存在创建,可以通过`os`模块或`pathlib`模块实现。以下是具体方法: --- ### 方法1:使用`os`模块 通过`os.path.exists()`检查目录是否存在,若不存在则用`os.makedirs()`创建: ```python import os dir_path = "./my_directory" if not os.path.exists(dir_path): os.makedirs(dir_path) print(f"目录 {dir_path} 创建成功") else: print(f"目录 {dir_path} 已存在") ``` **注意**: - `os.makedirs()`支持递归创建多级目录,例如`dir_path = "./a/b/c"`。 - 添加`exist_ok=True`参数可避免目录存在时抛出异常: ```python os.makedirs(dir_path, exist_ok=True) ``` --- ### 方法2:使用`pathlib`模块(推荐) `pathlib`提供更简洁的面向对象路径操作: ```python from pathlib import Path dir_path = Path("./my_directory") dir_path.mkdir(parents=True, exist_ok=True) print(f"目录 {dir_path} 已存在创建成功") ``` **参数说明**: - `parents=True`:自动创建目录。 - `exist_ok=True`:目录存在时不报错。 --- ### 关键区别 | 功能 | `os`模块 | `pathlib`模块 | |--------------------|-----------------------|----------------------| | 路径操作 | 字符串形式 | 面向对象 | | 跨平台兼容性 | 需手动处理路径分隔符 | 自动适配操作系统 | | 递归创建目录 | 需手动拆分路径层级 | 通过`parents=True`实现 | ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值