我目前正在研究各种“可挂载”文件格式的递归阅读器/解包器的想法。例如,它应该允许读取存储在 NTFS 目录结构中的 vmdk 文件中的压缩文件。
目前我只有这个头文件,CZipMounter.mount
用于在内存中加载和预解析 zip 文件 - 这会填充文件信息的私有列表vecEntries
(以及一组尚未提及的 zip 解析变量)。然后调用者调用CZipMounter.openDir
,它返回迭代器对象引用(~等效于 POSIX DIR
)。CZipIterator
必须有权访问CZipMounter
(至少我认为必须,有一个对底层文件开放的句柄,对解压缩库的句柄等)。然后调用者可以CZipIterator.readDir
在while循环中调用。当 CZipIterator 实例被销毁时,它相当于 POSIX CloseDir
。
现在我对CZipMounter
. 因为如果它过早地被销毁,所有CZipIterator
实例都会有指向已经被销毁的对象的指针(或引用,IMO 无关紧要)。
基本上我可能有两个完全不同的问题:
- 有没有更好的方法在这里实现这种递归?我不知何故认为将所需数据从 Mounter 复制到 Iterator 不是一个好主意。
- 如果我的示例确实有意义,如何防止
CZipMounter
过早销毁(即,我想CZipMounter
在所有 `CZipIterator~ 实例之后被销毁。
整个事情计划稍微复杂一些,因为会有更多的CXXXMounter
类和一个虚拟CMotherOfAllMounters
类。
enum commonDirTypes
{
myFILE = 0,
myDIR = 1
};
struct commonDirEntry
{
std::string entryName;
enum commonDirTypes entryType;
};
struct zipDirEntry : commonDirEntry
{
std::vector<zipDirEntry> vecEntries;
};
class CZipMounter;
class CZipIterator
{
public:
//readDir must return type of object and whether or not we can continue reading
struct zipDirEntry* readDir();
private:
CZipMounter* pMount;
};
class CZipMounter
{
public:
bool mount(const char*);
CZipIterator& openDir(const char*);
private:
std::vector<zipDirEntry> vecEntries;
};