コード例 #1
0
ファイル: path.cpp プロジェクト: unoyx/vfs
// .
// ..
// .\
// ..\
// name
bool isRelative(MyString path)
{
    assert(!path.isEmpty());
    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;
}
コード例 #2
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;
}
コード例 #3
0
ファイル: VirtualFileSystem.cpp プロジェクト: unoyx/vfs
bool VirtualDiskNode::isDir(MyString path) const
{
    if (!isNormalizedPath(path))
    {
        assert(0);
        return false;
    }
    path = path.toLower();
    MyString dir_path = dirname(path);
    DirNode* parent = const_cast<VirtualDiskNode*>(this)->getDirNode(dir_path);
    if (!parent)
        return false;
    MyString name = basename(path);
    if (name.isEmpty())
        return true;
    int dir = parent->findSubDir(name);
    return dir != -1;
}
コード例 #4
0
ファイル: CommandFactory.cpp プロジェクト: unoyx/vfs
SmartPtr<CommandInterface> CommandFactory::create(const MyString& command)
{
    MyString name;
    Vector<MyString> pathes;
    Vector<MyString> switches;
    int flag = parse(command, &name, &pathes, &switches);

    if (name.isEmpty())
    {
        if (pathes.size() == 1
            && _istalpha(pathes[0][0])
            && pathes[0][1] == _T(':'))
        {
            name = _T("change_volumn");
        }
        if (flag == -1)
        {
            throw CommandException(_T("无法识别的命令\n"));
        }
    }
    name = name.toLower();
    for (int i = 0; i < switches.size(); ++i)
    {
        switches[i] = switches[i].toLower();
    }
    SmartPtr<CommandInterface> ret;
    if (name == _T("prompt"))
    {
        ret = SmartPtr<CommandInterface>(new CommandPrompt);
    }
    else if (name == _T("change_volumn"))
    {
        ret = SmartPtr<CommandInterface>(new CommandChangeVolumn);
    }
    else if (name == _T("cd"))
    {
        ret = SmartPtr<CommandInterface>(new CommandCd);
    }
    else if (name == _T("dir"))
    {
        ret = SmartPtr<CommandInterface>(new CommandDir);
    }
    else if (name == _T("mkdir"))
    {
        ret = SmartPtr<CommandInterface>(new CommandMkdir);
    }
    else if (name == _T("rmdir"))
    {
        ret = SmartPtr<CommandInterface>(new CommandRmdir);
    }
    else if (name == _T("copy"))
    {
        ret = SmartPtr<CommandInterface>(new CommandCopy);
    }
    else if (name == _T("del"))
    {
        ret = SmartPtr<CommandInterface>(new CommandDel);
    }
    else if (name == _T("compare"))
    {
        ret = SmartPtr<CommandInterface>(new CommandCompare);
    }
    else
    {
        throw CommandException(_T("无法识别的命令\n"));
    }
    ret->setPathes(pathes);
    ret->setSwitches(switches);
    return ret;
}