C++ c++;h和获取绝对路径的语法
我正在学习使用dirent。虽然这个过程很有趣,但我在使用d_名称时遇到了一个问题 我想用d_的名字做两件事C++ c++;h和获取绝对路径的语法,c++,file-io,directory,absolute-path,dirent.h,C++,File Io,Directory,Absolute Path,Dirent.h,我正在学习使用dirent。虽然这个过程很有趣,但我在使用d_名称时遇到了一个问题 我想用d_的名字做两件事 递归地搜索子目录。为此,当我遇到DT_DIR类型的文件时,我将对该函数进行递归调用 void iterateDirectory(char* filePath){ DIR* dirPtr; dirent* entry; entry = readdir(dirPtr); ... } 使用目录的d_名称作为新的char*filePath参数。所以 if(dirEntry->d_type
void iterateDirectory(char* filePath){
DIR* dirPtr;
dirent* entry;
entry = readdir(dirPtr);
...
}
使用目录的d_名称作为新的char*filePath参数。所以
if(dirEntry->d_type == DT_DIR){
entry->d_name;
iterateDirectory(entry->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;
...
}
if(dirEntry->d_type==DT_REG){
输入->d_名称;
ifstream fin(条目->数据单元名称);
如果(财务是否打开)
多亏了萨姆·瓦沙维奇,我才解决了这个问题
问题确实在于没有使用完整路径名调用函数。我知道这一点,并立即尝试用realpath()修复它。问题是我在条目->d_name上使用realpath,而不是目录名
realpath(entry->d_name, buffer);
这返回了build目录而不是input目录,我假设这是因为在运行代码时,变量d_name的路径确实在build目录中
char* fullPath = realpath(inputPath, buffer);
这提供了我输入的实际路径。从那里,我只是将路径转换为字符串,并在遇到目录或文件时附加路径
再次感谢Sam。你说得对。当我阅读并完全理解realpath()手册所说的内容时,这一切都是有意义的。d_name
是目录中文件的名称。如果你opendir()
编辑了一个文件路径“foo/bar”,并且d_name
是“baz”,为了打开该文件,你显然必须打开“foo/bar/baz”,而不仅仅是您在d_name
中看到的内容。山姆,谢谢您的帮助。我意识到问题在于绝对路径,我正在试图找到一种从给定输入中获取目录绝对路径的方法。使用realpath(entry->d_name,buffer)没有太大帮助,因为1.realpath为我提供代码的生成目录,而不是输入目录。2.即使使用文件生成目录,它也不会更新子目录的地址。从foo转到foo/bar后,当它搜索baz时,realpath()为我提供foo/baz,而不是foo/bar/baz。使用realpath()
在目录名上获取目录的绝对路径。然后附加d_name
。我能想到的唯一方法是让向量包含目录初始输入的字符串或char*版本。因此std::vector文件夹最初将foo作为元素。然后,一旦我从foo读取,如果文件是目录(bar),我会将条目->d_名称添加到向量中。然后我会执行文件夹[0]。追加(“/”);文件夹[0]。追加(文件夹[1]);然后我会调用文件夹[0]处的递归函数。c_str();这可能是个愚蠢的问题,但这与执行realpath(条目->d_名称,缓冲区)不同吗?在目录名上使用realpath的语法是什么?从您的foo示例来看,它是realpath(foo,buffer)吗?