Linux API 判断目录是否存在

企鹅博客
19007
文章
0
评论
2019年12月29日16:11:39 评论 19 views 1058字阅读3分31秒

//create folder

struct stat statbuf;
if ( 0 != stat("./myfolder",&statbuf))   //If failed to get the status of this directory
{
     if (ENOENT == errno) //If folder  not exist
     {
           if (-1 == mkdir("./myfolder",S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_IXOTH)) {     -------------注意这里设置的mode并不是最终myfolder的mode,他是mode与系统umask计算后的值,即是个不确定的值。所以我们在创建完目录后通过api chmod再来设置一下目录的权限。
                            cout << "Failed to create folder in current directory." << endl;
                    }
           if (-1 == chmod("./myfolder",S_IRUSR|S_IWUSR|S_IXUSR|S_IRGRP|S_IWGRP|S_IROTH|S_IWOTH|S_IXOTH)) { -----------------注意,API中mode不能用类似777这样的值,必须用S_IRUSR这种系统定义的常量。
                            cout << errno << endl;
                    }
     }
     else
     {
         cout << "Failed to create  folder myfolder in current directory." << endl; 
     }
}  

另外可以通过stat获取状态后判断一个对象是否为目录或是文件

 if(S_ISDIR(buf.st_mode))  //check whether its directory
 {
      ptr = "directory";
 }

S_ISDIR 只是一个 macro 而已,buf.st_mode 和特定的mask 进行 & 运算,判断结果是否为特定的值。 

c++并不提供这种对目录的操作,但是linux的API是支持的。通过 man 2 mkdir即可查看API的详细说明。

man帮助分为好几章,第一章为command,默认man查询时为man 1,即查询命令;

继续阅读
  • 版权声明: 发表于 2019年12月29日16:11:39
  • 转载注明:https://www.qieseo.com/170528.html
Spring AOP的注解实例 Linux编程

Spring AOP的注解实例

上一篇写了Spring AOP 的两种代理,这里开始AOP的实现了,个人喜欢用注解方式,原因是相对于XML方式注解方式更灵活,更强大,更可扩展。所以XML方式的AOP实现就被我抛弃了。 实现Sprin...
二叉树的Java实现及特点总结 Linux编程

二叉树的Java实现及特点总结

二叉树是一种非常重要的数据结构,它同时具有数组和链表各自的特点:它可以像数组一样快速查找,也可以像链表一样快速添加。但是他也有自己的缺点:删除操作复杂。 我们先介绍一些关于二叉树的概念名词。 二叉树...
C++中的显式类型转换操作符 Linux编程

C++中的显式类型转换操作符

即使类型转换本身是危险的,在有些时候类型转换也是不可或缺的。程序员不使用显式转换,编译器也可能会使用隐式转换,那还不如把代码控制在程序员自己手中。 C++有4种显式类型转换操作符,最好不要使用C语言编...
匿名

发表评论

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: