如何从struct dirent派生类并使用它来存储readdir()的结果?
问题描述:
所以我从struct dirent派生了一个类。这是我的派生类的头看起来像: 的#ifndef Direntry_hpp 的#define Direntry_hpp如何从struct dirent派生类并使用它来存储readdir()的结果?
#include <dirent.h>
#include <iostream>
using namespace std;
class Direntry : public dirent{
private:
public:
void print(ostream&);
char* name(){ return d_name; }
ino_t inode(){ return d_ino; }
unsigned int type(){ return d_type; }
};
#endif /* Direntry_hpp */
所以,在我的代码我尝试使用READDIR()和我上面的类中的一个对象来存储它。所以readdir()返回struct dirent *。我尝试了一切,但我不能使用我的类对象来存储readdir()的结果。
for(;;){
//I want to say Direntry *dirEntry but it doesn't work when I try to store the result of readdir().
struct dirent* dirEntry;
if((dirEntry = readdir(dir)) == nullptr) break;
if(params.vFlag && dirEntry->d_type != DT_REG){
cout << setw(12) << dirEntry->d_ino << left << dirEntry->d_name << endl;
} else if(dirEntry->d_type == DT_REG){
cout << setw(12) << dirEntry->d_ino << left << dirEntry->d_name << endl;
Stats stat; //This class is derived from stat in the <sys/stat.h> library and it works.
if(lstat(path, &stat)) fatal("lstat error");
}
}
而且stat类来源于和它的作品,但由于某种原因,结构的dirent不工作,我期待它的方式。我做错了什么或者我想做什么不应该做的事情?
编辑:
Direntry* dirEntry;
if((dirEntry = readdir(dir)) == nullptr) break;
上面代码在编译时错误,指出:
分配到 'Direntry *' 从不兼容的类型 '结构的dirent *'
答
DIR* dir = opendir(path);
for(;;){
Direntry* dirEntry;
if((dirEntry = (Direntry*)readdir(dir)) == nullptr) break;
...
}
所以我发现你可以将readdir()的返回值从struct dirent *转换为Direntry *,它是从struct dirent
派生的类+1
请记住,只有当您自己的Directory对象不包含它自己的目录对象成员变量或有任何虚拟方法。 – nos
“某些原因struct dirent不能按我预期的方式工作” - >它是如何失败的 - 显示输出?预期什么? – chux
希望此代码仅用于学习,不会用于其他地方... – 0x0C4
是的,这纯粹是为了学习UNIX文件系统 –