查询目录或文件是否存在

问题的引入

在项目中可能会遇见查询某个路径或者文件是否存在的情况,如果不存在就新建。在看代码的时候发现有人这样实现:

dir  = opendir(g_logDir);
    if ( dir == NULLP )
    {
        mkdir(g_logDir, O_RDWR);
    }
    else
    {
        closedir(dir);
    }

对应文件的话会这样写

dir  = fopen(g_logDir);
    if ( dir == NULLP )
    {
        fwrite(g_logDir, O_RDWR);
    }
    else
    {
        fclose(g_logDir);
    }

目的很简单,就是查询目录或者文件是否存在,不存在就新建。这样确实可行,但是很费解,做了那么多事情就为了新建个路径或者文件,有是 open 又是 close的,要查询有查询的函数啊,何必呢!

access函数

函数原型

int access(const char *filename, int mode);

头文件

#include <dirent.h> 

参数说明

  • filename:可以填写文件夹路径或者文件路径
  • mode:0 (F_OK) 只判断是否存在
    2 (R_OK) 判断写入权限
    4 (W_OK) 判断读取权限
    6 (X_OK) 判断执行权限
    用于判断文件夹是否存在的时候,mode取0,判断文件是否存在的时候,mode可以取0、2、4、6。 若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1。

代码实现

#include<stdio.h>
#include<dirent.h>
#include<fcntl.h>

void main()
{
  char g_logDir[] = "/tmp/test";
  if ( access(g_logDir,0) != 0)
    {
     mkdir(g_logDir,0775 );
     printf("hello,no dir.... \n");
    }
    else
    { 
     printf("hello,yes dir.... \n");
    }
}

代码解析

这里用access函数判断路径是否存在,不存在就建立,用到了mkdir函数,其参数有两个,第一个写路径字符串,第二个写创建的路径的权限,这里不要写成O_RDONLY 、 O_WRONLY 、 O_RDWR 、 O_CREAT,也不要写成775三位数,不然权限会出错!

#define O_ACCMODE      0003
#define O_RDONLY         00
#define O_WRONLY         01
#define O_RDWR           02
#define O_CREAT        0100 /* not fcntl */
#define O_EXCL         0200 /* not fcntl */
#define O_NOCTTY       0400 /* not fcntl */
#define O_TRUNC       01000 /* not fcntl */
#define O_APPEND      02000
#define O_NONBLOCK    04000
#define O_NDELAY    O_NONBLOCK
#define O_SYNC       010000
#define O_FSYNC      O_SYNC
#define O_ASYNC      020000 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值