【问题标题】:Make dir in C, linux doesnt create sub-dirs (dir tree) - why?在 C 中创建目录,linux 不创建子目录(目录树) - 为什么?
【发布时间】:2013-08-12 21:19:09
【问题描述】:

我想在 linux 上用 C 语言创建一个目录树。我写了那个代码:

#include <sys/types.h>
#include <sys/stat.h>
#include <stdio.h>
#include <stdlib.h>

static int dirExists(const char *path)
{
    struct stat info;

    if(stat( path, &info ) != 0)
        return 0;
    else if(info.st_mode & S_IFDIR)
        return 1;
    else
        return 0;
}

int main(int argc, char **argv)
{
    const char *path = "./mydir/firstdir/";

    if(!dirExists(path))
    {
        mode_t mask = umask(0);
        if(mkdir(path, S_IRWXU | S_IRWXG | S_IRWXO) == -1)
            exit(-1);
        umask(mask);
    }

    printf("%d\n", dirExists(path));
    return 0;
}

path 是单个目录时,可以说是path = "./mydir",但是当我想创建一个目录树时,例如:path = "./mydir/a/b/c/d/" 不会创建目录。为什么?

【问题讨论】:

  • mkdir 不会像您尝试做的那样递归地创建目录。每次调用只创建一个目录,并且父目录必须已经存在。您需要修改您的代码,以便为您正在创建的每个目录调用一次 mkdir

标签: c linux makefile mkdir


【解决方案1】:

您没有创建目录树的代码,因此您的代码不会创建目录树。如果要创建目录树,请编写代码来执行此操作。

【讨论】:

  • +1 我喜欢这个答案。多少次我想写“写一些代码来解决你的问题”。作为一个答案,只是因为害怕随之而来的火焰而退缩。谢谢你让我开心,大卫=P
  • “那个代码,它并没有按照你的想法/说/声称它做。”
【解决方案2】:

你要做的是创建一个路径为path的文件夹

【讨论】:

  • 我本来想取笑你的“floder”错字,但apparently "floder" is an actual word in Dutch。也就是说,-1 表示未能回答 OP 的问题:我看不出多条河流和/或洪水将如何帮助创建目录树。
  • @Casey 抱歉打错了,我现在有点感冒头疼。
  • @Jongware Err,丹麦语 + 瑞典语 = 荷兰语。这个事实的证据很吸引人,但太长了,不适合这个空白。
【解决方案3】:

您需要定义能够创建目录树的代码。换句话说,Mkdir 不会递归地创建目录。

编辑: 在您发布的链接中,父目录已经存在。

【讨论】:

猜你喜欢
  • 2010-10-15
  • 1970-01-01
  • 1970-01-01
  • 2011-12-18
  • 1970-01-01
  • 2013-11-07
  • 2012-11-22
  • 2010-10-20
相关资源
最近更新 更多