当前位置: 首页 > news >正文

C语言创建文件夹和多级目录

C调用系统命令创建多级目录

#include <stdio.h>
#include <stdlib.h>int main() {const char *path = "a/b/c";// 创建目录命令的字符串char mkdir_command[100];sprintf(mkdir_command, "mkdir %s", path);// 调用系统命令system(mkdir_command);return 0;
}

注意,如果是在windows下,路径要改成 “a\b\c” 要实现跨平台可以写一个更改分隔符的实现。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#ifdef _WIN32
#define PATH_SEPARATOR '\\'
#else
#define PATH_SEPARATOR '/'
#endifint main() {char path[100]= "a/b/c";for (int i = 0; path[i]; i++) {if (path[i] == '/') {path[i] = PATH_SEPARATOR;}}printf("Path: %s\n", path);// 创建目录命令的字符串char mkdir_command[100];sprintf(mkdir_command, "mkdir %s", path);// 调用系统命令system(mkdir_command);puts("End");return 0;
}

windows下mkdir默认就支持多级目录
linux下mkdir需要参数p支持多级目录
如果文件已存在,命令行会显示子目录或文件已存在,但这又不是错误,不会影响后面的执行,所以无需手动判断该路径是否存在。

用C创建文件夹

用C来创建文件夹不是很推荐,因为他默认不支持多级目录。而且创建文件夹一般是项目初始化的过程,对性能也没什么要求,用C来实现很繁琐。

linux下使用 <sys/stat.h> 头文件中的 mkdir() 函数来创建目录。

#include <stdio.h>
#include <sys/stat.h>int main() {char* dirname = "my_directory"; // 要创建的目录名称// 使用 mkdir() 函数创建目录if (mkdir(dirname, 0777) == 0) {printf("目录创建成功: %s\n", dirname);} else {printf("无法创建目录: %s\n", dirname);}return 0;
}

windows下使用 <direct.h> 头文件中的 _mkdir() 函数来创建目录。

#include <stdio.h>
#include <direct.h>int main() {char* dirname = "my_directory"; // 要创建的目录名称// 使用 _mkdir() 函数创建目录if (_mkdir(dirname) == 0) {printf("目录创建成功: %s\n", dirname);} else {printf("无法创建目录: %s\n", dirname);}return 0;
}

C创建多级文件夹的实现

方法一:函数递归

#include <stdio.h>
#include <sys/stat.h>
#include <sys/types.h>// 递归创建目录
void createDirectory(const char *path) {struct stat st;// 如果目录已存在,则不执行创建操作if (stat(path, &st) == 0) {printf("Directory %s already exists.\n", path);return;}// 递归创建上一级目录createDirectory(dirname(path));// 创建当前目录int status = mkdir(path, 0700); // 0700 权限可根据需要更改if (status == 0) {printf("Directory %s created.\n", path);} else {printf("Failed to create directory %s.\n", path);}
}int main() {// 要创建的目录路径const char *path = "/path/to/your/directory";// 调用函数创建目录createDirectory(path);return 0;
}

递归的方式总觉得对性能不太友好,另外还有2个方案。
较笨的方法是使用strtok函数以及strcat函数来逐步分割和构建路径。
取巧的方法是使用strchr获取/位置,然后逐步构建路径

方法2:strchr实现逐步构建路径

#include <stdio.h>
#include <string.h>
#include <direct.h>
#include <errno.h>
int mkdirr(char *path) {// 接下来要以/来确定要创建的目录,所以最后必须是/结尾,否则最后这个就不会创建if (path[strlen(path) - 1] != '/') {strcat(path, "/");}// puts(path);char *dir = path;while (dir = strchr(dir, '/')) {// printf("Found '/' at position %ld\n", dir - path);*dir = '\0';// printf("path: %s\n", path);if (_mkdir(path) == 0 || errno == EEXIST) {printf("Directory \"%s\" created successfully or already exists.\n", path);}*dir = '/';dir++;}
}
int main() {char path[] = "test/1/2/3";mkdirr(path);return 0;
}

参考资料:

  • creating multiple recursive directories in c
http://www.lryc.cn/news/341680.html

相关文章:

  • 2024.5.6
  • mybatis配置获取自增主键
  • 完整、免费的把pdf转word文档
  • 使用 Lua 协程模拟 Golang 的 go defer 编程模式
  • 网络通信协议,UDP和TCP,初步了解
  • Golang | Leetcode Golang题解之第61题旋转链表
  • 美业SaaS系统多门店收银系统源码-【分润常见问题】讲解(一)
  • Chatbot 在教育中的应用
  • Apache和Nginx的区别以及如何选择
  • 深入探索Element-UI:构建高效Web前端的利器
  • 在Ubuntu 24.04 LTS (Noble Numbat)上安装nfs server以及nfs client
  • 供应链|经典论文解读:(s,S) 策略在动态库存下的最优性
  • Python从0到100(二十):文件读写和文件操作
  • AI+客服行业落地应用
  • 40 生产者消费者模型
  • QT5之windowswidget_菜单栏+工具栏_核心控件_浮动窗口_模态对话框_标准对话框/文本对话框
  • Satellite, Aerial, and Underwater Communication Track(WCSP2023)
  • AtCoder Regular Contest 176(ARC176)A、B
  • VTK —— 二、教程六 - 为模型加入3D微件(按下i键隐藏或显示)(附完整源码)
  • 一种基于图搜索的全局/局部路径避障策略
  • LT2611UX四端口 LVDS转 HDMI2.0,带音频
  • TypeError报错处理
  • PHP的数组练习实验
  • P3743 小鸟的设备
  • 数字旅游以科技创新为动力:推动旅游服务的智能化、网络化和个性化发展,满足游客日益增长的多元化、个性化需求
  • 64位的IP地址设想
  • 1.python爬虫爬取视频网站的视频可下载的源url
  • Linux目录结构
  • 电脑问题2【彻底删除CompatTelRunner】
  • 【算法】【贪心算法】【leetcode】870. 优势洗牌