コード例 #1
0
ファイル: CommandCd.cpp プロジェクト: unoyx/vfs
void CommandCd::exec(VirtualDiskNode* vfs)
{
    if (!vfs)
    {
        assert(0);
        return;
    }
    if (m_path.isEmpty()) 
    {
        MyString pwd = vfs->pwd();
        if (!pwd.endWith(_T("\\")))
        {
            pwd += _T("\\");
        }
        _tprintf(_T("%s\n"), pwd.c_str());
        return;
    }

    if (!isNormalizedPath(m_path))
    {
        m_path = vfs->pathNormalize(m_path);
    }
    m_path = m_path.toLower();
    if (!m_path.startWith(_T("c:")))
    {
        throw CommandException(_T("系统找不到指定的驱动器\n"));
    }

    if (!vfs->isDir(m_path))
    {
        throw CommandException(_T("系统找不到指定的目录\n"));
    }
    vfs->chdir(m_path);
    return;
}
コード例 #2
0
ファイル: path.cpp プロジェクト: unoyx/vfs
bool isNormalizedPath(MyString path)
{
    if (isVolumnRelative(path) || isRelative(path))
    {
        return false;
    }
    else if (isAbs(path) && !path.endWith(_T("\\")))
    {
        return true;
    }
    return false;
}
コード例 #3
0
ファイル: path.cpp プロジェクト: unoyx/vfs
bool isNormalizedPath(MyString path)
{
    if (isRelative(path))
    {
        return false;
    }
    else if (isAbs(path) && !path.endWith(_T("\\"))
             && (path.startWith(_T("c:")) || path.startWith(_T("C:"))))
    {
        return true;
    }
    return false;
}
コード例 #4
0
ファイル: VirtualFileSystem.cpp プロジェクト: unoyx/vfs
// 不改变路径中的大小写情况
MyString VirtualDiskNode::pathNormalize(MyString path) const
{
    MyString ret;
    if (!isPath(path))
    {
        assert(0);
        return ret;
    }
    if (isVolumnRelative(path))
    {
        ret = join(m_pwd.substr(0, 2), path);
    }
    else if (isRelative(path))
    {
        if (path == _T("."))
        {
            ret = m_pwd;
        }
        else if (path == _T(".."))
        {
            ret = dirname(m_pwd);
        }
        else if (path.startWith(_T("..\\")))
        {
            ret = dirname(m_pwd) + path.substr(2);
        } 
        else if (path.startWith(_T(".\\")))
        {
            ret = m_pwd + path.substr(1);
        }
        // 直接输入名字的情况
        else if (!match(path, _T("?:*")))
        {
            ret = m_pwd + _T("\\") + path;
        }
    } 
    // 绝对路径中处理:\dir\file的情况
    //else if (path.startWith(_T("\\")))
    //{
    //    ret = _T("c:") + path;
    //}

    if (path.endWith(_T("\\")))
    {
        ret = ret.substr(0, ret.size() - 1);
    }
    return ret;
}