Esempio n. 1
0
        bool DeepCopyDirectory(const char* from, const char* to)
        {
            if (!from || !to) return false;

            DirectoryTree fromDir(from);

            if (!fromDir) return false;

            CreateDirectoryIfNotExists(to);
            DirectoryTree toDir(to);

            if (!toDir) return false;

            bool success(true);            

            auto visitor = [to,&success](const DirectoryTree*, const DirectoryEntry& entry)
            {
                auto newPath = Aws::FileSystem::Join(to, entry.relativePath);

                if (entry.fileType == Aws::FileSystem::FileType::File)
                {
                    Aws::OFStream copyOutStream(newPath.c_str());
                    Aws::IFStream originalStream(entry.path.c_str());

                    if(!copyOutStream.good() || !originalStream.good())
                    {
                        success = false; 
                        return false;
                    }

                    std::copy(std::istreambuf_iterator<char>(originalStream),
                        std::istreambuf_iterator<char>(), std::ostreambuf_iterator<char>(copyOutStream));
                }
                else if (entry.fileType == Aws::FileSystem::FileType::Directory)
                {
                    success = CreateDirectoryIfNotExists(newPath.c_str());
                    return success;
                }

                return success;
            };

            fromDir.TraverseDepthFirst(visitor);
            return success;
        }
Esempio n. 2
0
void DirUtils::EnsureDirectoryExists(const wstring& path)
{
	wstring normalizedPath = DirUtils::NormalizePath(path);
	vector<wstring> pathParts = StringUtils::Split(normalizedPath, L'/');

	vector<wstring>::iterator it;
	vector<wstring>::iterator itEnd = pathParts.end();

	wstring tmpPath;
	for(it = pathParts.begin();it!=itEnd;it++)
	{
		wstring current = *it;

		tmpPath.append(current + L"/");

		CreateDirectoryIfNotExists(tmpPath);
	}
}