void ADLSearchManager::prepareDestinationDirectories(DestDirList& destDirVector, DirectoryListing::Directory* root, StringMap& params) { // Load default destination directory (index = 0) destDirVector.clear(); auto id = destDirVector.insert(destDirVector.end(), DestDir()); id->name = "ADLSearch"; id->dir = new DirectoryListing::Directory(nullptr, root, "<<<" + id->name + ">>>", true, true, true); // Scan all loaded searches for (auto is = collection.begin(); is != collection.end(); ++is) { // Check empty destination directory if (is->destDir.empty()) { // Set to default is->ddIndex = 0; continue; } // Check if exists bool isNew = true; long ddIndex = 0; for (id = destDirVector.begin(); id != destDirVector.end(); ++id, ++ddIndex) { if (stricmp(is->destDir.c_str(), id->name.c_str()) == 0) { // Already exists, reuse index is->ddIndex = ddIndex; isNew = false; break; } } if (isNew) { // Add new destination directory id = destDirVector.insert(destDirVector.end(), DestDir()); id->name = is->destDir; id->dir = new DirectoryListing::Directory(nullptr, root, "<<<" + id->name + ">>>", true, true, true); is->ddIndex = ddIndex; } } // Prepare all searches for (auto ip = collection.begin(); ip != collection.end(); ++ip) { ip->prepare(params); } }
void CBINDInstallDlg::CopyFiles() { CString destFile; for (int i = 0; installFiles[i].filename; i++) { if (m_toolsOnly && !installFiles[i].withTools) continue; SetCurrent(IDS_COPY_FILE, installFiles[i].filename); destFile = DestDir(installFiles[i].destination) + "\\" + installFiles[i].filename; CString filespec = m_currentDir + "\\" + installFiles[i].filename; CVersionInfo bindFile(destFile); CVersionInfo origFile(filespec); if (!origFile.IsValid() && installFiles[i].checkVer) { if (MsgBox(IDS_FILE_BAD, MB_YESNO, installFiles[i].filename) == IDNO) throw(Exception(IDS_ERR_COPY_FILE, installFiles[i].filename, GetErrMessage())); } try { /* * Ignore Version checking. We need to make sure that all files get * copied regardless of whether or not they are earlier or later * versions since we cannot guarantee that we have either backward or * forward compatibility between versions. */ bindFile.CopyFileNoVersion(origFile); } catch(...) { if (installFiles[i].importance != FileData::Trivial) { if (installFiles[i].importance == FileData::Critical || MsgBox(IDS_ERR_NONCRIT_FILE, MB_YESNO, installFiles[i].filename, GetErrMessage()) == IDNO) { SetItemStatus(IDC_COPY_FILE, FALSE); throw(Exception(IDS_ERR_COPY_FILE, installFiles[i].filename, GetErrMessage())); } } } } SetItemStatus(IDC_COPY_FILE); }
void CBINDInstallDlg::DeleteFiles(BOOL uninstall) { CString destFile; for (int i = 0; installFiles[i].filename; i++) { if (installFiles[i].checkVer) continue; destFile = DestDir(installFiles[i].destination) + "\\" + installFiles[i].filename; if (uninstall) SetCurrent(IDS_DELETE_FILE, installFiles[i].filename); DeleteFile(destFile); } if (!m_keepFiles) { WIN32_FIND_DATA findData; CString file = m_etcDir + "\\*.*"; BOOL rc; HANDLE hFile; hFile = FindFirstFile(file, &findData); rc = hFile != INVALID_HANDLE_VALUE; while (rc == TRUE) { if (strcmp(findData.cFileName, ".") && strcmp(findData.cFileName, "..")) { file = m_etcDir + "\\" + findData.cFileName; SetCurrent(IDS_DELETE_FILE, file); DeleteFile(file); } rc = FindNextFile(hFile, &findData); } FindClose(hFile); } if (uninstall) SetItemStatus(IDC_COPY_FILE, TRUE); }
bool FPluginHelpers::CopyPluginTemplateFolder(const TCHAR* DestinationDirectory, const TCHAR* Source, const FString& PluginName) { check(DestinationDirectory); check(Source); IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile(); FString DestDir(DestinationDirectory); FPaths::NormalizeDirectoryName(DestDir); FString SourceDir(Source); FPaths::NormalizeDirectoryName(SourceDir); // Does Source dir exist? if (!PlatformFile.DirectoryExists(*SourceDir)) { return false; } // Destination directory exists already or can be created ? if (!PlatformFile.DirectoryExists(*DestDir) && !PlatformFile.CreateDirectory(*DestDir)) { return false; } // Copy all files and directories, renaming specific sections to the plugin name struct FCopyPluginFilesAndDirs : public IPlatformFile::FDirectoryVisitor { IPlatformFile& PlatformFile; const TCHAR* SourceRoot; const TCHAR* DestRoot; const FString& PluginName; TArray<FString> NameReplacementFileTypes; TArray<FString> IgnoredFileTypes; FCopyPluginFilesAndDirs(IPlatformFile& InPlatformFile, const TCHAR* InSourceRoot, const TCHAR* InDestRoot, const FString& InPluginName) : PlatformFile(InPlatformFile) , SourceRoot(InSourceRoot) , DestRoot(InDestRoot) , PluginName(InPluginName) { // Which file types we want to replace instances of PLUGIN_NAME with the new Plugin Name NameReplacementFileTypes.Add(TEXT("cs")); NameReplacementFileTypes.Add(TEXT("cpp")); NameReplacementFileTypes.Add(TEXT("h")); NameReplacementFileTypes.Add(TEXT("vcxproj")); // Which file types do we want to ignore IgnoredFileTypes.Add(TEXT("opensdf")); IgnoredFileTypes.Add(TEXT("sdf")); IgnoredFileTypes.Add(TEXT("user")); IgnoredFileTypes.Add(TEXT("suo")); } virtual bool Visit(const TCHAR* FilenameOrDirectory, bool bIsDirectory) { FString NewName(FilenameOrDirectory); // change the root and rename paths/files NewName.RemoveFromStart(SourceRoot); NewName = NewName.Replace(TEXT("PLUGIN_NAME"), *PluginName, ESearchCase::CaseSensitive); NewName = FPaths::Combine(DestRoot, *NewName); if (bIsDirectory) { // create new directory structure if (!PlatformFile.CreateDirectoryTree(*NewName) && !PlatformFile.DirectoryExists(*NewName)) { return false; } } else { FString NewExt = FPaths::GetExtension(FilenameOrDirectory); if (!IgnoredFileTypes.Contains(NewExt)) { // Delete destination file if it exists if (PlatformFile.FileExists(*NewName)) { PlatformFile.DeleteFile(*NewName); } // If file of specified extension - open the file as text and replace PLUGIN_NAME in there before saving if (NameReplacementFileTypes.Contains(NewExt)) { FString OutFileContents; if (!FFileHelper::LoadFileToString(OutFileContents, FilenameOrDirectory)) { return false; } OutFileContents = OutFileContents.Replace(TEXT("PLUGIN_NAME"), *PluginName, ESearchCase::CaseSensitive); if (!FFileHelper::SaveStringToFile(OutFileContents, *NewName)) { return false; } } else { // Copy file from source if (!PlatformFile.CopyFile(*NewName, FilenameOrDirectory)) { // Not all files could be copied return false; } } } } return true; // continue searching } }; // copy plugin files and directories visitor FCopyPluginFilesAndDirs CopyFilesAndDirs(PlatformFile, *SourceDir, *DestDir, PluginName); // create all files subdirectories and files in subdirectories! return PlatformFile.IterateDirectoryRecursively(*SourceDir, CopyFilesAndDirs); }
bool IPlatformFile::CopyDirectoryTree(const TCHAR* DestinationDirectory, const TCHAR* Source, bool bOverwriteAllExisting) { check(DestinationDirectory); check(Source); FString DestDir(DestinationDirectory); FPaths::NormalizeDirectoryName(DestDir); FString SourceDir(Source); FPaths::NormalizeDirectoryName(SourceDir); // Does Source dir exist? if (!DirectoryExists(*SourceDir)) { return false; } // Destination directory exists already or can be created ? if (!DirectoryExists(*DestDir) && !CreateDirectory(*DestDir)) { return false; } // Copy all files and directories struct FCopyFilesAndDirs : public FDirectoryVisitor { IPlatformFile & PlatformFile; const TCHAR* SourceRoot; const TCHAR* DestRoot; bool bOverwrite; FCopyFilesAndDirs(IPlatformFile& InPlatformFile, const TCHAR* InSourceRoot, const TCHAR* InDestRoot, bool bInOverwrite) : PlatformFile(InPlatformFile) , SourceRoot(InSourceRoot) , DestRoot(InDestRoot) , bOverwrite(bInOverwrite) { } virtual bool Visit(const TCHAR* FilenameOrDirectory, bool bIsDirectory) { FString NewName(FilenameOrDirectory); // change the root NewName = NewName.Replace(SourceRoot, DestRoot); if (bIsDirectory) { // create new directory structure if (!PlatformFile.CreateDirectoryTree(*NewName) && !PlatformFile.DirectoryExists(*NewName)) { return false; } } else { // Delete destination file if it exists and we are overwriting if (PlatformFile.FileExists(*NewName) && bOverwrite) { PlatformFile.DeleteFile(*NewName); } // Copy file from source if (!PlatformFile.CopyFile(*NewName, FilenameOrDirectory)) { // Not all files could be copied return false; } } return true; // continue searching } }; // copy files and directories visitor FCopyFilesAndDirs CopyFilesAndDirs(*this, *SourceDir, *DestDir, bOverwriteAllExisting); // create all files subdirectories and files in subdirectories! return IterateDirectoryRecursively(*SourceDir, CopyFilesAndDirs); }