DirHandler VirtualDiskNode::createDir(MyString path) { if (!isNormalizedPath(path)) { assert(0); return DirHandler(nullptr); } MyString dir_path = dirname(path).toLower(); DirNode* parent = getDirNode(dir_path); if (!parent) return DirHandler(nullptr); MyString dir_name = basename(path); if (dir_name == _T("..") || dir_name == _T(".")) return DirHandler(nullptr); if (parent->findSubDir(dir_name.toLower()) != -1) return DirHandler(nullptr); DirNode* ndir = parent->addSubDir(); assert(ndir); ndir->set_name(dir_name); ndir->set_path(path); // 新建文件夹中,包含“.”,“..”两个文件夹。 DirNode* n_self = ndir->addSubDir(); n_self->set_name(_T(".")); n_self->set_path(dir_path + _T("\\.")); DirNode* n_parent = ndir->addSubDir(); n_parent->set_name(_T("..")); n_parent->set_path(dir_path + _T("\\..")); n_parent->set_ctime(parent->get_ctime()); return DirHandler(ndir); }