Example #1
0
DirHandler VirtualDiskNode::openDir(MyString path)
{
    if (!isNormalizedPath(path))
    {
        assert(0);
        return DirHandler(nullptr);
    }
    path = path.toLower();
    MyString dir_path = dirname(path);
    DirNode* parent = getDirNode(dir_path);
    if (!parent)
        return DirHandler(nullptr);
    MyString dir_name = basename(path);
    // 访问根目录, “空”文件夹的情况
    if (dir_name.isEmpty() || dir_name == _T("..") || dir_name == _T("."))
    {
        return DirHandler(parent);
    }
    int dir = parent->findSubDir(dir_name);
    if (dir == -1)
    {
        return DirHandler(nullptr);
    }
    else
    {
        return DirHandler(parent->getSubDirRef(dir));
    }
}
Example #2
0
DirNode* VirtualDiskNode::getDirNode(const MyString& path)
{
    assert(isNormalizedPath(path));
    Vector<MyString> dirnames = split(path);
    DirNode* ret = &m_root;
    if (dirnames[0] != ret->get_name().toLower() || ret->get_type() == FILE_TYPE)
        return nullptr;

    for (int i = 1; i < dirnames.size(); ++i)
    {
        int subdir = ret->findSubDir(dirnames[i]);
        if (subdir == -1)
        {
            return nullptr;
        }
        else
        {
            ret = ret->getSubDirRef(subdir);
        }
    }
    return ret;
}