Ejemplo n.º 1
0
	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);
	}
Ejemplo n.º 2
0
	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());
		}
	}