问题描述
我目前正在研究各种“可挂载”文件格式的递归阅读器/解包器的想法。例如,它应该允许读取存储在 NTFS 目录结构中的 vmdk 文件中的压缩文件。
目前我只有这个标题,我使用 CZipMounter.mount
在内存中加载和预解析 zip 文件 - 这填充了 vecEntries
中文件信息的私人列表(以及一组尚未提到了 zip 解析变量)。然后调用者调用 CZipMounter.openDir
,它返回迭代器对象引用(~等效于 POSIX DIR
)。 CZipIterator
必须有权访问 CZipMounter
(至少我认为它必须,有一个句柄打开底层文件,句柄解压缩库等)。然后调用者可以在 while 循环中调用 CZipIterator.readDir
。当 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;
};
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)