我正在学习使用dirent.h。虽然这个过程很迷人和有趣,但是在使用d_name时遇到了问题。
我想使用d_name完成两件事情。
我的问题是如何在迭代点找到给定文件或子目录的绝对路径。我的初始解决方案是使用“.”作为当前目录。将“。”的地址存储到字符串中,并附加“\”+entry->d_name。但我认为语法是错误的。
我关于绝对路径问题的想法正确吗?还是我漏掉了其他问题?如果是绝对路径问题,获取文件绝对路径的语法是什么?
附注:
过去有人告诉我要最小化上传到stackoverflow上的代码量,我呈现了我认为所需的最小代码。如果上面提供的信息不足,请链接github页面以获取代码。
我想使用d_name完成两件事情。
recursively search through the sub-directories. To this, when I encounter DT_DIR type files, I will make recursive call to the function
void iterateDirectory(char* filePath){ DIR* dirPtr; dirent* entry; entry = readdir(dirPtr); ... }
within itself using d_name of the directory as a new char* filePath parameter. So,
if(dirEntry->d_type == DT_DIR){ entry->d_name; iterateDirectory(entry->d_name); ... }
Open all files within a directory. To do this, when I encounter DT_REG files, I will create ifstream object and open the file using d_name. So,
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; ... }
我的问题是如何在迭代点找到给定文件或子目录的绝对路径。我的初始解决方案是使用“.”作为当前目录。将“。”的地址存储到字符串中,并附加“\”+entry->d_name。但我认为语法是错误的。
我关于绝对路径问题的想法正确吗?还是我漏掉了其他问题?如果是绝对路径问题,获取文件绝对路径的语法是什么?
附注:
过去有人告诉我要最小化上传到stackoverflow上的代码量,我呈现了我认为所需的最小代码。如果上面提供的信息不足,请链接github页面以获取代码。
https://github.com/ForeverABoy/dirent.h_practice/blob/master/directoryIterator.cpp
任何帮助都受到赞赏。谢谢!
d_name
是目录中文件的名称。如果你使用opendir()
打开了一个名为 "foo/bar" 的 filePath,并且d_name
是 "baz",那么为了打开这个文件,你显然需要打开 "foo/bar/baz" 而不仅仅是d_name
中看到的。 - Sam Varshavchikrealpath()
函数获取目录名的绝对路径,然后附加d_name
。 - Sam Varshavchikrealpath()
的手册页面。不要只是读单词,要理解它的含义,这样一切都会变得清晰明了。 - Sam Varshavchik