相似question在这里。
但它只涵盖单个目录级别。例如,如果你给了 /home/mypc/directory
并且如果只有 directory
不存在,它会创建一个。但是当涉及到 /home/mypc/directory/directory2
时 directory
和 directory2
都不存在,它给出了一个段错误.谁能为此建议合适的方法。
提前致谢。
最佳答案
如果你不想依赖外部进程,你可以只写一个递归函数来创建目录层次结构:
int mkdirhier(char const* target) {
int r = 0;
struct stat st = {0};
if (-1 != stat(target, &st))
return 0; // already exists
char* parent = strdup(target);
if (strcmp(dirname(parent), target))
r = mkdirhier(parent); // recurse
if (parent)
free(parent);
if (!r && (r = mkdir(target, 0700)))
perror(target);
return r;
}
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <libgen.h>
#include <errno.h>
#include <time.h>
int mkdirhier(char const* target);
int main() {
char buf[1024];
srand(time(NULL));
snprintf(buf, sizeof(buf), "./tree/some%d/dir%d/sub", rand(), rand());
mkdirhier(buf);
snprintf(buf, sizeof(buf), "/nopermissions/tree/some%d/dir%d/sub", rand(), rand());
return mkdirhier(buf);
}
打印
gcc main.c; ./a.out; find .
/nopermissions: Permission denied
.
./tree
./tree/some1804649601
./tree/some1804649601/dir1553142090
./tree/some1804649601/dir1553142090/sub
./main.cpp
./a.out
./main.c
关于c - 我如何检查c程序中的目录是否存在并在不存在时创建它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32496081/