本文封装了C 传入路径递归创建目录和文件接口实现,文末有提供示例代码;
eg:传入./dir1/dir2/dir3/dir4/file0 可自动在当前目录创建dir1/dir2/dir3/dir4/四级目录,并创建file0文件

需要包含的头文件

#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>

接口实现

/*!
*@brief  从文件绝对路径中获取文件夹路径
*@details
*@param [In]  file 文件位置(绝对路径)
*       [Out]  dirPath  获取到的文件夹路径
*       [IN]  dirPathSize 存放文件夹路径的buf size
*@return 本次结果
* -\ref  0  成功
*      -1  失败
*/
int GetDirPathFromFilePath(const char* filePath, char* dirPath, int dirPathSize)
{int i = 0;if ((NULL == filePath) || ('\0' == filePath[0]) || (NULL == dirPath)){return -1;}if (dirPathSize < strlen(filePath)){return -1;}memset(dirPath, 0x0, dirPathSize);strcpy(dirPath, filePath);for (i = strlen(dirPath)-1; i >= 0; i--){if (('/' == dirPath[i]) || ('\\' == dirPath[i])){dirPath[i] = '\0';break;}}return 0;
}/*!
*@brief  传入绝对路径递归创建目录
*@details
*@param [In]  path 目录路径(绝对路径)
*@return 本次结果
* -\ref  0  成功
*      -1  失败
*/
int MyMkdir(char* path)
{int len = 0;char pathName[256] = {0};int ret = -1;if (NULL == path){return -1;}if (0 == access(path, 0)){return 0;}memset(pathName, 0, sizeof(pathName));len = strlen(path);while ('/' != path[len]){len--;}strncpy(pathName, path, len);if (0 == access(pathName, 0)){ret = mkdir(path, 0755);if (0 != ret){return ret;}}else{ret = MyMkdir(pathName);if (0 != ret){return ret;}ret = mkdir(path, 0755);if (0 != ret){return ret;}}return ret;
}/*!
*@brief  传入绝对路径创建文件(路径不存在也会创建文件)
*@details
*@param [In] file 文件位置(绝对路径)
*@return 本次结果
* -\ref  0  成功
*      -1  失败
*/
int MyCreateFile(const char* filePath)
{int ret = 0;char dirPath[256] = {0};FILE *fp = NULL;if ((NULL == filePath) || ('\0' == filePath[0])){return -1;}if (0 == access(filePath, 0)){return 0;}ret = GetDirPathFromFilePath(filePath, dirPath, sizeof(dirPath));if (0 != ret){return -1;}ret = MyMkdir(dirPath);if (0 != ret){return -1;}fp = fopen(filePath, "w+");if (NULL == fp){return -1;}fclose(fp);fp = NULL;sync();return 0;
}

示例代码

#include <stdio.h>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <string.h>int main()
{MyCreateFile("./dir1/dir2/dir3/dir4/file0");return 0;
}

运行结果

可以看到已经创建文件和目录成功了,希望对大家有所帮助

root@test:/test_code$ ./a.out
root@test:/test_code$ find . -name "file0"
./dir1/dir2/dir3/dir4/file0

linux C传入路径递归创建目录和文件接口实现相关推荐

  1. Linux命令--mkdir命令:创建目录(文件夹)

    3.4 mkdir命令:创建目录(文件夹) mkdir 是创建目录的命令,其基本信息如下: 命令名称:mkdir. 英文原意:make directories. 所在路径:/bin/mkdir. 执行 ...

  2. linux c 判断路径是 目录还是文件

    主要函数: stat(),opendir(),readdir(), 主要结构体:struct dirent  和 struct stat 主要宏:S_ISDIR(),     S_ISREG() 函数 ...

  3. linux去掉java路径_Java显示目录文件列表和删除目录

    Java显示目录文件列表和删除目录 以d:\a目录为例,假设D:\a目录内的结构如下: d:\a |--a.sql |--back.log |--b | |--e | | |--1.txt | | | ...

  4. java多级目录文件是否存在_Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)...

    兼容windows和linux. 分析: 在windows下路径有以下表示方式: (标准)D:\test\1.txt (不标准,参考linux)D:/test/1.txt 然后在java中,尤其使用F ...

  5. linux 新建1 10文件夹,linux创建目录和文件的命令

    linux下进行操作难免会遇到创建文件或者目录的情况,那么我们要使用什么目录来创建目录和文件呢?下面由学习啦小编为大家整理了linux创建目录和文件命令的相关知识,希望大家喜欢! 一.linux创建目 ...

  6. linux系统指令学习(创建目录,在目录下创建一个*.txt,*.txt输入内容,把*.txt文件拷贝到*目录下,把*文件夹目录移动到*目录下)

    linux系统指令学习1 透过12道题熟练掌握20个指令 Linux有150个常用指令,透过12道题去学习以及练习指令 1.创建一个目录/dzqc 提示: windows下的路径样式为c: \dzqc ...

  7. Linux创建目录和文件 mkdir、touch、cp、rm、mv 和 ln命令

    目录 前言 一.mkdir命令 二.touch命令 三.ln命令 3.1 软/硬链接 3.2 软链接详解 四.cp命令 五.rm命令 六.mv命令 七.rename 前言  点击此处查看 ls.cd. ...

  8. linux ls 命令 路径,使用ls命令在Linux中使用完整路径列出文件

    许多人会发现,这是重复的问题,但我已经经历了所有问题,然后问及这个主题,但没有为我工作.使用ls命令在Linux中使用完整路径列出文件 我想打印使用ls命令的特定文件格式的完整路径名到目前为止,我发现 ...

  9. linux防火墙文件路径,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件

    虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...

最新文章

  1. LeetCode简单题之将句子排序
  2. java gettext_JAVA中getText()怎么从一个JTextArea中读出内容?
  3. 【tf下载mnist数据】urlopen error [Errno 11004] getaddrinfo failed
  4. 如何通过 C# 动态备份 Sql 数据库?
  5. php连接mysql数据,php连接mysql数据库
  6. 第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构
  7. 单片机ADC采样算法----平均值采样法
  8. MP3 Encoder for mac(MP3编码器)修复版
  9. 电源模块-LM5117-BUCK- 电路
  10. NPDP知识推送-第三章新产品开发流程管理(1)
  11. 用java实现DES解密
  12. snapchat_如何查看谁查看了Snapchat故事并对其进行了截图
  13. java工厂模式:简单工厂、工厂方法、抽象工厂(通俗易懂)
  14. C# 获取电脑序列号和主板序列号
  15. 乔戈里推荐的新版Java学习路线,开源!
  16. springboot整合H+,基于summernote的富文本编辑器图片上传
  17. halcon机器视觉玩转车牌识别-超人视觉罗超
  18. Python网络爬虫之HTTP原理
  19. debconf-set-selections mysql_debconf 和 dpkg-preconfgure 的用法
  20. 啃传奇服务器端的源码

热门文章

  1. sqlyog怎么设置默认值_MySQL界面工具Sqlyog用法
  2. oracle 分析函数 NTILE
  3. 单片微型计算机原理及应用第三版,单片微型计算机原理及应用 课后习题答案 山东理工...
  4. Confluence 6 配置站点主页面
  5. Pandas-数据结构-DataFrame(一):创建DF【①由数组组成的字典;②由Series组成的字典;③通过二维数组直接创建;④由字典组成的列表;⑤由字典组成的字典】
  6. keytool no found
  7. 尚筹网 —— 4、[知识] RBAC 权限控制模型 和 Ajax请求
  8. 90%的面试官都会问到交换网络里面冗余和破环的STP协议
  9. 升级Unity 2018.3.2f1出现Built-in support for Substance Designer materials has been removed from Unity的问题
  10. 管理类联考 综合考试 - 逻辑缺陷