コード例 #1
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;
}
コード例 #2
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;
}
コード例 #3
0
ファイル: path.cpp プロジェクト: unoyx/vfs
MyString join(MyString path, MyString name)
{
    if (path[path.size() - 1] != _T('\\') && !name.isEmpty() && !name.startWith(_T("\\")))
    {
        path += _T("\\");
    }
    path += name;
    return path;
}
コード例 #4
0
ファイル: path.cpp プロジェクト: unoyx/vfs
bool isLegalName(MyString name)
{
    for (int i = 0; i < name.size(); ++i)
    {
        if (!isLegalChar(name[i]))
            return false;
    }
    if (name.startWith(_T(" ")) || name.size() > g_MAX_NAME_SIZE)
        return false;
    return true;
}
コード例 #5
0
ファイル: path.cpp プロジェクト: unoyx/vfs
// C:\
// \name
bool isAbs(MyString path)
{
    /*文件名需要忽略大小写 */
    if (path.startWith(_T("\\")))
    {
        return true;
    }
    else if (match(path, _T("?:*")) && _istalpha(path[0]))
    {
        return true;
    }
    return false;
}
コード例 #6
0
ファイル: path.cpp プロジェクト: unoyx/vfs
// test second
// .
// ..
// .\
// ..\
// name
bool isRelative(MyString path)
{
    if (path.isEmpty())
    {
        return false;
    }
    if (path.startWith(_T(".")))
    {
        return true;
    }
    else if (path.startWith(_T("\\")))
    {
        return true;
    }
    else
    {
        int pos = path.find(_T('\\'));
        MyString head = path.substr(0, pos);
        if (!head.isEmpty() && isLegalName(head))
            return true;
    }
    return false;
}
コード例 #7
0
ファイル: path.cpp プロジェクト: unoyx/vfs
// test first
// \name
bool isVolumnRelative(MyString path)
{
    if (path.startWith(_T("\\")))
        return true;
    return false;
}