0

我目前正在研究各种“可挂载”文件格式的递归阅读器/解包器的想法。例如,它应该允许读取存储在 NTFS 目录结构中的 vmdk 文件中的压缩文件。

目前我只有这个头文件,CZipMounter.mount用于在内存中加载和预解析 zip 文件 - 这会填充文件信息的私有列表vecEntries(以及一组尚未提及的 zip 解析变量)。然后调用者调用CZipMounter.openDir,它返回迭代器对象引用(~等效于 POSIX DIR)。CZipIterator必须有权访问CZipMounter(至少我认为必须,有一个对底层文件开放的句柄,对解压缩库的句柄等)。然后调用者可以CZipIterator.readDir在while循环中调用。当 CZipIterator 实例被销毁时,它相当于 POSIX CloseDir

现在我对CZipMounter. 因为如果它过早地被销毁,所有CZipIterator实例都会有指向已经被销毁的对象的指针(或引用,IMO 无关紧要)。

基本上我可能有两个完全不同的问题:

  1. 有没有更好的方法在这里实现这种递归?我不知何故认为将所需数据从 Mounter 复制到 Iterator 不是一个好主意。
  2. 如果我的示例确实有意义,如何防止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;
};
4

0 回答 0