Beispiel #1
0
void FsDirectoryImpl::createFile(const std::string& filename, int maxChunkSize, short replication)
{
    Path path(filename);
    DirNode* pDirNode;

    if (path.isPureDir()){
        LOG4CPLUS_WARN(m_logger, "the filename is pure dir :" << filename);
        throw InvalidFileOrDirName("the filename is pure dir");
    }

    if( (pDirNode = m_pDirTree->createDirNodes(path.getDirName())) ) {
        if (pDirNode->findFile(path.getFileName())){
            LOG4CPLUS_WARN(m_logger, "file already exist :" << path.getFileName());
            throw FileOrDirAlreadyExists("file already exist error");
        }

        INode inode(path.getFileName(), replication, maxChunkSize);

        //->addFile should have bool return value     
        pDirNode->addFile(inode);

    }
    else{
        LOG4CPLUS_WARN(m_logger, "the path name is invalid : " << path.getDirName());
        throw InvalidFileOrDirName("the path name is invalid");
    }
}
Beispiel #2
0
FileHandler VirtualDiskNode::createFile(MyString path)
{
    if (!isNormalizedPath(path))
    {
        assert(0);
        return FileHandler(nullptr);
    }
    MyString dir_path = dirname(path).toLower();
    DirNode* parent = getDirNode(dir_path);
    if (!parent)
        return FileHandler(nullptr);
    // 文件名创建时保留大小写
    MyString file_name = basename(path);
    if (parent->findFile(file_name) != -1)
    {
        return FileHandler(nullptr);
    }

    FileNode* nfile = parent->addFile();
    assert(nfile);
    nfile->set_name(file_name);
    nfile->set_path(path.toLower());
    return FileHandler(nfile);
}