【问题标题】:Error opening existing directory using opendir in c++在 C++ 中使用 opendir 打开现有目录时出错
【发布时间】:2015-04-12 20:54:32
【问题描述】:

我正在使用如下的 opendir() 来访问目录。

DIR *dp;
if((dp  = opendir(dir.c_str())) == NULL) {
    cout << "Error(" << errno << ") opening " << dir << endl;
    return errno;
}

但是,即使目录存在,我仍然收到以下错误。

Error(2) opening /path/to/folder/

当我执行 ls /path/to/folder 时,我可以获得文件名列表

【问题讨论】:

    标签: c++ file opendir


    【解决方案1】:

    注意 /path/to/folder 与 /path/to/folder/ 不同

    【讨论】:

    • 你能告诉我输出:ls -l /path/to/folder/ 吗?
    • @Marius 在无尾随斜杠版本和它的(显然是兄弟)双胞胎版本之间进行选择时有什么注意事项?
    【解决方案2】:

    errno 值 2 表示 ENOENT(它是 Error NO ENTry 的缩写),即“目录不存在,或名称为空字符串”。 如何在代码中定义dir

    std::string dir = "/path/to/folder/";
    DIR* dp = opendir(dir.c_str());
    
    if (dp == NULL) 
    {
        std::cout << "Error(" << errno << ") opening " << dir << std::endl;
        perror("opendir");
    
        return errno;
    }
    
    closedir(dp);
    

    更新 #1:

    尝试调用你的shell脚本:

    main.sh folder/ foldername 
    

    其中main.sh 包含:

    #!/bin/sh                                                                                                                                                                         
    path="$1$2"
    echo "$path"
    ls -l "$path"
    

    【讨论】:

    • dir 是从主程序作为参数传递的 std::string。手动输入 ./program 文件夹/文件夹名有效,但是当我使用这样的脚本时:script.sh 文件夹/文件夹名,它调用 ./program $folder$foldername,它不起作用但它是相同的字符串。
    • 您是否从与program 相同的文件夹中运行shell 脚本?我认为这可能是相对路径和绝对路径之间的不匹配。
    • 我又来了,ls -l $folder$foldername 的结果是什么script.sh
    • 它导致“没有这样的文件或目录”,但是,在我的 C++ 程序中在 opendir() 之前输出字符串时,字符串是相同的。我指定了绝对路径(我都试过了)
    • ls $folder 有效,但 ls $folder$foldername 在脚本中无效。对我想要的文件夹名称执行 ls 在终端中工作。如何让它在我的脚本中工作?似乎连接字符串会导致问题,尽管这似乎是推荐的方法
    猜你喜欢
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    • 2011-04-03
    相关资源
    最近更新 更多