我正在学习使用 dirent.h。虽然这个过程很有趣,但我在使用 d_name 时遇到了问题。
我想使用 d_name 做两件事。
递归搜索子目录。对此,当我遇到 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); ... }
打开目录中的所有文件。为此,当我遇到 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
任何和所有的帮助表示赞赏。谢谢!