【发布时间】:2019-02-11 06:30:29
【问题描述】:
基本上我正在为一个类项目创建一个基本的 shell 程序。我一直在遍历目录中的文件/文件夹。
我的错误在于函数 DisplayDirectoryContents()
class Directory
{
private:
map<string, pair<list<Folder>, list<File> > > directoryContents;
string directoryPath;
public:
list<Folder> getFolders() {return directoryContents[directoryPath].first;}
list<File> getFiles() {return directoryContents[directoryPath].second;}
string getDirectoryPath() {return directoryPath;}
Directory()
{
directoryPath = "root/";
File *file = new File("Test");
directoryContents[directoryPath].second.push_back(*file);
}
void DisplayDirectoryContents()
{
// Get files and folders from directory
list<File> files = this->getFiles();
for(int i = 0; i < files.size(); i++)
{
cout << files->getFileName(); << Error here
}
}
};
我尝试了几种不同的方法来设置此功能,但我似乎无法获得正确的代码来使其工作。
我认为这会起作用,但每次我尝试弄乱 DisplayDirectoryContents() 函数时,它都会给我带来错误。有没有人有任何提示可以帮助我解决这个问题?谢谢
class File
{
string fileName;
string fileTime;
public:
string getFileTime(){return fileTime;}
string getFileName(){return fileName;}
void setFileTime(){time_t now = time(NULL);
fileTime = ctime(&now);}
void setFileName(string newFileName){fileName = newFileName;}
File(){}
File(string fName)
{
fileName = fName;
time_t now = time(NULL);
fileTime = ctime(&now);
}
void MakeFile(string fName);
void RemoveFile(string fName);
};
【问题讨论】:
-
您设计中的地图看起来已经过时了 - 而不是只有一个条目的地图,只有两个简单的列表成员。
-
我没有看到
Folder的任何定义 - 你是否打算改为std::list<Directory>(至少有意义......)? -
所以,我使用地图的原因是因为我要制作它,以便您可以添加更多目录、文件和文件夹。我应该继续使用它还是切换到简单的列表成员?
-
是的,我只是在测试以确保它在进入文件夹类之前可以与文件一起使用
-
您已经可以将任意数量的文件或文件夹添加到列表中。如果要为多个不同的目录路径添加条目,则映射 only 是有意义的。
Directory和Folder将为同一事物获得两个不同的类。没有什么反对将其他Directory实例添加到父Directory实例。这不是也能更好地反映文件系统吗?
标签: c++ list class object listiterator