如何检查c程序中是否存在目录,如果它不是';不在那里
这里也一样 但它只涵盖单个目录级别。例如,如果您提供了如何检查c程序中是否存在目录,如果它不是';不在那里,c,linux,directory,segmentation-fault,C,Linux,Directory,Segmentation Fault,这里也一样 但它只涵盖单个目录级别。例如,如果您提供了/home/mypc/directory,并且如果只有目录不存在,它将创建一个。但是当涉及到/home/mypc/directory/directory2时,如果目录和目录都不存在,则会出现分段错误。有谁能建议一个合适的方法吗 提前谢谢 将路径拆分为其组件,并检查路径的每个组件。因此,对于路径/home/mypc/directory/directory2,您可以按顺序检查并可能创建路径 /home /home/mypc /home/mypc/
/home/mypc/directory
,并且如果只有目录
不存在,它将创建一个。但是当涉及到/home/mypc/directory/directory2
时,如果目录和目录都不存在,则会出现分段错误。有谁能建议一个合适的方法吗
提前谢谢 将路径拆分为其组件,并检查路径的每个组件。因此,对于路径/home/mypc/directory/directory2
,您可以按顺序检查并可能创建路径
/home
/home/mypc
/home/mypc/directory
/home/mypc/directory/directory2
将路径拆分为其组件,并检查路径的每个组件。因此,对于路径/home/mypc/directory/directory2
,您可以按顺序检查并可能创建路径
/home
/home/mypc
/home/mypc/directory
/home/mypc/directory/directory2
如果要使用mkdir
创建目录,只需添加-p
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
struct stat st = {0};
if (stat("/home/mypc/directory/directory2", &st) == -1) {
system("mkdir --mode=744 -p /home/mypc/directory/directory2");
}
#包括
#包括
#包括
#包括
struct stat st={0};
if(stat(“/home/mypc/directory/directory2”,&st)=-1){
系统(“mkdir--mode=744-p/home/mypc/directory/directory2”);
}
如果要使用mkdir
创建目录,只需添加-p
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <stdlib.h>
struct stat st = {0};
if (stat("/home/mypc/directory/directory2", &st) == -1) {
system("mkdir --mode=744 -p /home/mypc/directory/directory2");
}
#包括
#包括
#包括
#包括
struct stat st={0};
if(stat(“/home/mypc/directory/directory2”,&st)=-1){
系统(“mkdir--mode=744-p/home/mypc/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);
}
如果不想依赖外部进程,可以编写递归函数来创建目录层次结构:
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);
}
#define fileLocation”/home/laksith/Desktop/log/lp“
实际上我将把它作为一个宏。因此,当一个人给任何目录编辑该行时,文件应该存储在那里。#define fileLocation”/home/laksith/Desktop/log/lp“
实际上,我将把它作为一个宏。因此,当一个人给任何目录编辑行时,文件应该存储在那里。那么它做什么呢。你能解释一下吗?首先,它将验证目录的状态。如果无法获得此状态,则目录不存在。因此,您调用系统来执行mkdir
谁使用-p
@Lucas创建完整路径,除了不存在以外,还有其他原因导致stat
可能失败(例如,权限、太多符号链接、路径的一个组件不是目录等)因此,声称stat失败意味着不存在是不正确的。-1:使用系统
不是一个很好的解决方案:分支进程效率低下,依赖路径
,易受攻击,无法轻松使用带有空格的文件路径…@williampersell你是对的,正如文档所描述的,那么它是做什么的呢。你能解释一下吗?首先,它将验证目录的状态。如果无法获得此状态,则目录不存在。因此,您调用系统来执行mkdir
谁使用-p
@Lucas创建完整路径,除了不存在以外,还有其他原因导致stat
可能失败(例如,权限、太多符号链接、路径的一个组件不是目录等)因此,声称stat失败意味着不存在是不正确的。-1:使用系统不是一个很好的解决方案:分支进程效率低下,依赖路径,易受攻击,无法轻松使用带有空格的文件路径…@williampersell正如文档所述,您是正确的。