算法书P67至P69:
- #include <iostream>
- #include <string>
- using namespace std;
- struct DirectoryOrFile;
- typedef DirectoryOrFile* ptrDirectoryOrFile;
- struct DirectoryOrFile
- {
- unsigned int size;
- bool flag;
- string name;
- ptrDirectoryOrFile firstChild;
- ptrDirectoryOrFile nextSibling;
- DirectoryOrFile(unsigned int s,bool f,string n,ptrDirectoryOrFile fc,ptrDirectoryOrFile ns):
- size(s),flag(f),name(n),firstChild(fc),nextSibling(ns){}
- bool isDirectory();
- };
- bool DirectoryOrFile::isDirectory()
- {
- return flag;
- }
- static void ListDir(ptrDirectoryOrFile ptrToDOF,unsigned int depth)
- {
- if(ptrToDOF == NULL)
- {
- return;
- }
- else
- {
- for(unsigned i=0;i<depth;i++)
- {
- cout<<' ';
- }
- cout<<ptrToDOF->name<<endl;
- if(ptrToDOF->isDirectory())
- {
- ListDir(ptrToDOF->firstChild,depth+2);
- }
- ListDir(ptrToDOF->nextSibling,depth);
- }
- }
- void ListDirectory(ptrDirectoryOrFile ptrToDOF)
- {
- ListDir(ptrToDOF,0);
- }
- unsigned int SizeDirectory(ptrDirectoryOrFile ptrToDOF)
- {
- if(ptrToDOF == NULL)
- {
- return 0;
- }
- else
- {
- unsigned int sum=ptrToDOF->size;
- if(ptrToDOF->isDirectory())
- {
- sum+=SizeDirectory(ptrToDOF->firstChild);
- }
- sum+=SizeDirectory(ptrToDOF->nextSibling);
- return sum;
- }
- }
- int main()
- {
- DirectoryOrFile fHuman2(23,false,"路人乙",NULL,NULL);
- DirectoryOrFile fHuman1(12,false,"路人甲",NULL,&fHuman2);
- DirectoryOrFile fProg2(22,false,"程序3",NULL,NULL);
- DirectoryOrFile dProg2(1,true,"程序文件夹2",&fProg2,NULL);
- DirectoryOrFile fProg1(34,false,"程序1",NULL,&dProg2);
- DirectoryOrFile dProg1(1,true,"程序文件夹1",&fProg1,NULL);
- DirectoryOrFile dName(1,true,"人物文件夹",&fHuman1,&dProg1);
- DirectoryOrFile dMain(1,true,"主文件夹",&dName,NULL);
- ListDirectory(&dMain);
- cout<<SizeDirectory(&dMain)<<endl;
- return 0;
- }

本文介绍了一个用于表示文件和目录的结构体,并通过递归方式实现了文件系统的遍历和目录大小的计算。该程序定义了DirectoryOrFile结构体来存储文件或目录的相关信息,并提供了列出目录内容和计算目录总大小的功能。
4万+

被折叠的 条评论
为什么被折叠?



