gpt4 book ai didi

c++ dirent.h 和获取绝对路径的语法

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:44:56 27 4
gpt4 key购买 nike

我正在学习使用 dirent.h。虽然这个过程引人入胜且有趣,但我在使用 d_name 时遇到了问题。

我想使用 d_name 做两件事。

  1. 递归搜索子目录。对此,当我遇到DT_DIR类型的文件时,我会递归调用该函数

    void iterateDirectory(char* filePath){
    DIR* dirPtr;
    dirent* entry;
    entry = readdir(dirPtr);
    ...
    }

    在自身内部使用目录的 d_name 作为新的 char* filePath 参数。所以,

    if(dirEntry->d_type == DT_DIR){
    entry->d_name;
    iterateDirectory(entry->d_name);
    ...
    }
  2. 打开目录中的所有文件。为此,当我遇到 DT_REG 文件时,我将创建 ifstream 对象并使用 d_name 打开该文件。所以,

    if(dirEntry->d_type == DT_REG){
    entry->d_name;
    ifstream fin(entry->d_name);
    if(fin.is_open)
    cout<<"Opened"<<endl;
    else
    cout<<"Not Opened"<<endl;
    ...
    }

我遇到的问题是,void iterateDirectory() 函数和 ifstream fin() 似乎都无法将 entry->d_name 识别为有效输入。当我使用 d_name 调用迭代函数或将 ifstream 与 entry->d_name 一起使用时,我检查目录或文件是否打开失败。该函数本身正在运行,因为我已经使用不同的 char* 输入检查了完全相同的函数。我唯一能想到的问题是我的函数没有将绝对路径作为参数。

我的问题是如何在迭代点找到给定文件或子目录的绝对路径。我最初的解决方案是使用“。”因为那是当前目录。存储“.”的地址成一个字符串,并附加“\”+entry->d_name。但我认为语法错误。

我对绝对路径问题的看法是否正确?还是我遗漏了另一个问题?如果是绝对路径问题,获取文件绝对路径的语法是什么?

附言

我过去被告知要尽量减少我上传到堆栈溢出的代码量以解决问题,并且我提供了我认为是最小的所需代码。如果上面提供的信息不足,我正在链接代码的 github 页面。

https://github.com/ForeverABoy/dirent.h_practice/blob/master/directoryIterator.cpp

感谢任何帮助。谢谢!

最佳答案

感谢 Sam Varshavchik,我已经解决了这个问题。

问题确实在于没有使用完整路径名调用函数。我知道这一点并立即尝试使用 realpath() 修复它。问题是我在 entry->d_name 上使用了 realpath 而不是目录名。

realpath(entry->d_name, buffer);

这返回了构建目录而不是输入目录。我认为这是因为在运行代码时,变量 d_name 的路径确实在构建目录中。

char* fullPath = realpath(inputPath, buffer);

这给了我输入的实际路径。从那里开始,我只是将路径转换为字符串,并在遇到目录或文件时附加路径。

再次感谢山姆。你是对的。当我阅读并完全理解 realpath() 手册的内容时,一切都说得通了。

关于c++ dirent.h 和获取绝对路径的语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40813865/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com