loading

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

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

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

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

c

复制代码

#include

#include

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" 要实现跨平台可以写一个更改分隔符的实现。

c

复制代码

#include

#include

#include

#ifdef _WIN32

#define PATH_SEPARATOR '\\'

#else

#define PATH_SEPARATOR '/'

#endif

int 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下使用 头文件中的 mkdir() 函数来创建目录。

c

复制代码

#include

#include

int main() {

char* dirname = "my_directory"; // 要创建的目录名称

// 使用 mkdir() 函数创建目录

if (mkdir(dirname, 0777) == 0) {

printf("目录创建成功: %s\n", dirname);

} else {

printf("无法创建目录: %s\n", dirname);

}

return 0;

}

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

c

复制代码

#include

#include

int main() {

char* dirname = "my_directory"; // 要创建的目录名称

// 使用 _mkdir() 函数创建目录

if (_mkdir(dirname) == 0) {

printf("目录创建成功: %s\n", dirname);

} else {

printf("无法创建目录: %s\n", dirname);

}

return 0;

}

C创建多级文件夹的实现

方法一:函数递归

c

复制代码

#include

#include

#include

// 递归创建目录

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实现逐步构建路径

c

复制代码

#include

#include

#include

#include

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