赞
踩
#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 '/' #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; }
无论是linux还是windows,mkdir默认就支持多级目录。如果文件已存在,命令行会显示子目录或文件已存在,但这又不是错误,不会影响后面的执行,所以无需手动判断该路径是否存在。
用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; }
#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获取/位置,然后逐步构建路径
#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; }
参考资料:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。