如何从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 *'

+0

“某些原因struct dirent不能按我预期的方式工作” - >它是如何失败的 - 显示输出?预期什么? – chux

+1

希望此代码仅用于学习,不会用于其他地方... – 0x0C4

+0

是的,这纯粹是为了学习UNIX文件系统 –

DIR* dir = opendir(path);  

for(;;){ 
    Direntry* dirEntry; 
    if((dirEntry = (Direntry*)readdir(dir)) == nullptr) break; 
    ... 
} 

所以我发现你可以将readdir()的返回值从struct dirent *转换为Direntry *,它是从struct dirent

派生的类
+1

请记住,只有当您自己的Directory对象不包含它自己的目录对象成员变量或有任何虚拟方法。 – nos