void copyDir(const std::string& srcName, const std::string& dstName) { Directory* pSrcDir = getDir(srcName); Directory* pDstDir = nullptr; try { pDstDir = getDir(dstName); } catch (const DoesntExistException&) { } if (srcName == dstName || pDstDir) //либо передали два одинаковых имени,либо существует директория с дстнейм { throw AlreadyExistException(dstName); } FileSystemElement* pParent = pSrcDir->pParent_; const User* pOwner = pSrcDir->pOwner_; dirs_.emplace_back(dstName, pParent, pOwner); pSrcDir = getDir(srcName); pDstDir = getDir(dstName); pDstDir->copyDirContentFromSrc(pSrcDir); }
void copyDirContentFromSrc(const Directory* pSrcDir) //в текущую директорию из параметра,который ей передается,копирует содержимое В СЕБЯ { /* проходит по всем директориям и копирует их в себя,а потом по их содержимому и их в себя */ for (const Directory& dir : pSrcDir->dirs_) { const std::string& dstName = dir.name_; FileSystemElement* pParent = dir.pParent_; const User* pOwner = dir.pOwner_; dirs_.emplace_back(dstName, pParent, pOwner); Directory* pDstDir = getDir(dstName); pDstDir->copyDirContentFromSrc(&dir); } for (const File& file : pSrcDir->files_) { createFile(file.name(), file.owner(), file.content()); } }