const CLuaArguments& CLuaArguments::operator = ( const CLuaArguments& Arguments ) { CopyRecursive ( Arguments ); // Return the given reference allowing for chaining return Arguments; }
bool CopyRecursive(const QString& source, const QString& destination) { // Make the destination directory QString dir_name = source.section('/', -1, -1); QString dest_path = destination + "/" + dir_name; QDir().mkpath(dest_path); QDir dir(source); for (const QString& child : dir.entryList(QDir::NoDotAndDotDot | QDir::Dirs)) { if (!CopyRecursive(source + "/" + child, dest_path)) { qLog(Warning) << "Failed to copy dir" << source + "/" + child << "to" << dest_path; return false; } } for (const QString& child : dir.entryList(QDir::NoDotAndDotDot | QDir::Files)) { if (!QFile::copy(source + "/" + child, dest_path + "/" + child)) { qLog(Warning) << "Failed to copy file" << source + "/" + child << "to" << dest_path; return false; } } return true; }
// TODO: implement this for other platforms void FileUtils::CopyRecursive(std::string &dir, std::string &dest, std::string exclude) { if (!IsDirectory(dest)) { CreateDirectory(dest); } #ifdef DEBUG std::cout << "\n>Recursive copy " << dir << " to " << dest << std::endl; #endif std::vector<std::string> files; ListDir(dir, files); for (size_t i = 0; i < files.size(); i++) { std::string& filename = files[i]; if (!exclude.empty() && exclude == filename) continue; std::string srcName = Join(dir.c_str(), filename.c_str(), NULL); std::string destName = Join(dest.c_str(), filename.c_str(), NULL); if (IsDirectory(srcName)) { #ifdef DEBUG std::cout << "create dir: " << destName << std::endl; #endif CreateDirectory(destName); CopyRecursive(srcName, destName); } else { std::wstring wideSrcName = UTILS_NS::UTF8ToWide(srcName); std::wstring wideDestName = UTILS_NS::UTF8ToWide(destName); CopyFileW(wideSrcName.c_str(), wideDestName.c_str(), FALSE); } } }
CLuaArguments::CLuaArguments ( const CLuaArguments& Arguments, std::map < CLuaArguments*, CLuaArguments* > * pKnownTables ) { // Copy all the arguments CopyRecursive ( Arguments, pKnownTables ); }