linux C传入路径递归创建目录和文件接口实现
本文封装了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传入路径递归创建目录和文件接口实现相关推荐
- Linux命令--mkdir命令:创建目录(文件夹)
3.4 mkdir命令:创建目录(文件夹) mkdir 是创建目录的命令,其基本信息如下: 命令名称:mkdir. 英文原意:make directories. 所在路径:/bin/mkdir. 执行 ...
- linux c 判断路径是 目录还是文件
主要函数: stat(),opendir(),readdir(), 主要结构体:struct dirent 和 struct stat 主要宏:S_ISDIR(), S_ISREG() 函数 ...
- linux去掉java路径_Java显示目录文件列表和删除目录
Java显示目录文件列表和删除目录 以d:\a目录为例,假设D:\a目录内的结构如下: d:\a |--a.sql |--back.log |--b | |--e | | |--1.txt | | | ...
- java多级目录文件是否存在_Java文件夹操作,判断多级路径是否存在,不存在就创建(包括windows和linux下的路径字符分析)...
兼容windows和linux. 分析: 在windows下路径有以下表示方式: (标准)D:\test\1.txt (不标准,参考linux)D:/test/1.txt 然后在java中,尤其使用F ...
- linux 新建1 10文件夹,linux创建目录和文件的命令
linux下进行操作难免会遇到创建文件或者目录的情况,那么我们要使用什么目录来创建目录和文件呢?下面由学习啦小编为大家整理了linux创建目录和文件命令的相关知识,希望大家喜欢! 一.linux创建目 ...
- linux系统指令学习(创建目录,在目录下创建一个*.txt,*.txt输入内容,把*.txt文件拷贝到*目录下,把*文件夹目录移动到*目录下)
linux系统指令学习1 透过12道题熟练掌握20个指令 Linux有150个常用指令,透过12道题去学习以及练习指令 1.创建一个目录/dzqc 提示: windows下的路径样式为c: \dzqc ...
- Linux创建目录和文件 mkdir、touch、cp、rm、mv 和 ln命令
目录 前言 一.mkdir命令 二.touch命令 三.ln命令 3.1 软/硬链接 3.2 软链接详解 四.cp命令 五.rm命令 六.mv命令 七.rename 前言 点击此处查看 ls.cd. ...
- linux ls 命令 路径,使用ls命令在Linux中使用完整路径列出文件
许多人会发现,这是重复的问题,但我已经经历了所有问题,然后问及这个主题,但没有为我工作.使用ls命令在Linux中使用完整路径列出文件 我想打印使用ls命令的特定文件格式的完整路径名到目前为止,我发现 ...
- linux防火墙文件路径,防火墙问题 Linux系统 /etc/sysconfig/路径下无iptables文件
虚拟机新装了一个CentOs7,然后做防火墙配置的时候找不到iptables文件,解决方法如下: 因为默认使用的是firewall作为防火墙,把他停掉装个iptable systemctl stop ...
最新文章
- LeetCode简单题之将句子排序
- java gettext_JAVA中getText()怎么从一个JTextArea中读出内容?
- 【tf下载mnist数据】urlopen error [Errno 11004] getaddrinfo failed
- 如何通过 C# 动态备份 Sql 数据库?
- php连接mysql数据,php连接mysql数据库
- 第一季4:Hi3518E_SDK_Vx.x.x.x的SDK目录结构
- 单片机ADC采样算法----平均值采样法
- MP3 Encoder for mac(MP3编码器)修复版
- 电源模块-LM5117-BUCK- 电路
- NPDP知识推送-第三章新产品开发流程管理(1)
- 用java实现DES解密
- snapchat_如何查看谁查看了Snapchat故事并对其进行了截图
- java工厂模式:简单工厂、工厂方法、抽象工厂(通俗易懂)
- C# 获取电脑序列号和主板序列号
- 乔戈里推荐的新版Java学习路线,开源!
- springboot整合H+,基于summernote的富文本编辑器图片上传
- halcon机器视觉玩转车牌识别-超人视觉罗超
- Python网络爬虫之HTTP原理
- debconf-set-selections mysql_debconf 和 dpkg-preconfgure 的用法
- 啃传奇服务器端的源码
热门文章
- sqlyog怎么设置默认值_MySQL界面工具Sqlyog用法
- oracle 分析函数 NTILE
- 单片微型计算机原理及应用第三版,单片微型计算机原理及应用 课后习题答案 山东理工...
- Confluence 6 配置站点主页面
- Pandas-数据结构-DataFrame(一):创建DF【①由数组组成的字典;②由Series组成的字典;③通过二维数组直接创建;④由字典组成的列表;⑤由字典组成的字典】
- keytool no found
- 尚筹网 —— 4、[知识] RBAC 权限控制模型 和 Ajax请求
- 90%的面试官都会问到交换网络里面冗余和破环的STP协议
- 升级Unity 2018.3.2f1出现Built-in support for Substance Designer materials has been removed from Unity的问题
- 管理类联考 综合考试 - 逻辑缺陷