欢迎转载,但请注明出处,并给活力链接。谢谢
这一节来分析一个Fileinformation结构体数组对应于各个path文件的类。
Fileinformation结构体数组是所有文件的基本信息,path文件包含的是目录和文件信息。通过Fileinformation结构体数组中的siteid、diroffset、fileoffset可以精确的定位到对应的path文件得到对应的路径和文件名。
但是我们需要的不只这个功能。对于一个站点来说,我们还需要诸如以下功能:
“给出目录,得到该目录下的所有文件”
“给出Fileinformation结构体数组的一个索引,如果它是一个目录,得到该目录下的所有文件”
“给出Fileinformation结构体数组的一个索引,如果它是一个目录,得到该目录下的所有文件对应于Fileinformation结构体数组的索引”
Mapping类封装了上面所说的这些功能。它的主要接口如下:
// 构造时,传入站点ip、该站点所有的文件在Fileinformation数组中的起始索引和终止索引
Mapping(const char* siteip,
const INDEXTYPE startindex,
const INDEXTYPE endindex,
bool readonly=true);
// 给定Fileinformation数组的索引,判断该文件是否是目录
inline bool isDir(const INDEXTYPE idx);
//给定Fileinformation数组的索引,返回该文件的大小
inline long long getSize(const INDEXTYPE idx);
//给定Fileinformation数组的索引,返回该文件所在路径在对应的path文件中的偏移
inline int getDiroffset(const INDEXTYPE idx);
//给定一个目录在Fileinformation数组中的索引,返回它所包含的文件在Fileinformation数组中的索引
bool subDirFile(const INDEXTYPE idx,vector<int>& subfilesindex);
//给定一个目录在Fileinformation数组中的索引,返回它所包含的文件名和这些文件在Fileinformation数组中的索引
bool subDirFile(const string& dirpath,
vector<FILENAMEANDINDEX>& fileandindex);
//给点一个目录名和文件名,返回它在Fileinformation数组中的索引
bool dirFile(const string& dirpath,const string& dirname,int &index);
//给定Fileinformation数组的索引,改变Fileinformation数组中的项对应的文件大小
void changeSize(const INDEXTYPE idx,const long long size);
Mapping类的完整代码在src/mapping/下,读者可自行查阅。
那么这个类主要用于哪些地方?请读者们思考一下。下一节我接着分析。