如何从 struct dirent 派生 class 并使用它来存储 readdir() 的结果?
How do I derive a class from struct dirent and use it to store result from readdir()?
所以我从 struct dirent 派生了一个 class。这是我派生的 class header 的样子:
#ifndef Direntry_hpp
#define Direntry_hpp
#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() 和我上面 class 的 class object 来存储它。所以 readdir() returns struct dirent*。我已经尝试了所有方法,但我无法使用 class object 来存储 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 class 派生自并且它有效,但由于某些原因,struct dirent 没有按照我预期的方式工作。我做错了什么或者我在尝试做一些不应该做的事情?
编辑:
Direntry* dirEntry;
if((dirEntry = readdir(dir)) == nullptr) break;
上面的代码在编译时产生一个错误:
从不兼容的类型 'struct dirent *'
分配给 'Direntry *'
DIR* dir = opendir(path);
for(;;){
Direntry* dirEntry;
if((dirEntry = (Direntry*)readdir(dir)) == nullptr) break;
...
}
所以我发现您可以将 readdir() 的 return 值从 struct dirent* 转换为 Direntry*,这是从 struct dirent
派生的 class
所以我从 struct dirent 派生了一个 class。这是我派生的 class header 的样子: #ifndef Direntry_hpp #define Direntry_hpp
#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() 和我上面 class 的 class object 来存储它。所以 readdir() returns struct dirent*。我已经尝试了所有方法,但我无法使用 class object 来存储 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 class 派生自并且它有效,但由于某些原因,struct dirent 没有按照我预期的方式工作。我做错了什么或者我在尝试做一些不应该做的事情?
编辑:
Direntry* dirEntry;
if((dirEntry = readdir(dir)) == nullptr) break;
上面的代码在编译时产生一个错误:
从不兼容的类型 'struct dirent *'
DIR* dir = opendir(path);
for(;;){
Direntry* dirEntry;
if((dirEntry = (Direntry*)readdir(dir)) == nullptr) break;
...
}
所以我发现您可以将 readdir() 的 return 值从 struct dirent* 转换为 Direntry*,这是从 struct dirent
派生的 class