/* * public static string[] CollecFiles() * { * * }*/ /// <summary> /// Fonction de copie avec affichage de la progression /// </summary> /// <param name="fileSrc">File source</param> /// <param name="destFile">File to destination</param> /// <param name="overWrite">Ecrasement du fichier de destination</param> internal static bool Copy(string fileSrc, string destFile, bool overWrite = false) { ITrace.BeginLine($"[CopyFiles] Copy of the file '{Path.GetFileName(fileSrc)}': "); try { File.Copy(fileSrc, destFile, overWrite); ITrace.EndlLine("Successful"); return(true); } catch (IOException e) { ITrace.EndlLine("Error"); ITrace.WriteLine(e.Message); return(false); } }
/// <summary> /// Copie les cheatcodes / Copy all cheatcodes /// </summary> private void CopyCheatCodes() { string CCodesDir = Path.Combine(Properties.Settings.Default.CCodesPath, _SystemName); ITrace.BeginLine($"[CopyCheatCodes] Search in: '{CCodesDir}' of files beginning by '{_ZeGame.Title}-': "); if (!Directory.Exists(CCodesDir)) { return; } string usableT = _ZeGame.Title.Replace(":", "-"); string[] fichiers = Directory.GetFiles(CCodesDir, usableT, System.IO.SearchOption.AllDirectories); ITrace.EndlLine($"{fichiers.Length} found"); OPFiles opF = new OPFiles() { WhoCallMe = "CheatCodes", Buttons = Dcs_Buttons.NoStop, }; opF.IWriteLine += (string message) => ITrace.WriteLine(message); opF.IWrite += (string message) => ITrace.BeginLine(message); // foreach (string file in fichiers) { // TODO URGENCE //21/10/2020 //var cheatCodeRes = opF.FileNameCompare(file, _Tree.Children[nameof(SubFolder.CheatCodes)].Path); //CopyFile(file, _Tree.Children[nameof(SubFolder.CheatCodes)].Path, cheatCodeRes); Copy_Handler(file, _Tree.Children[nameof(SubFolder.CheatCodes)].Path, "Cheats"); //21/10/2020 } }
/// <summary> /// Copie les clones / Clones copy /// </summary> private void CopyClones() { ITrace.WriteLine(prefix: false); OPFiles opF = new OPFiles() { Buttons = Dcs_Buttons.NoStop, WhoCallMe = "Clone" }; opF.IWriteLine += (string message) => ITrace.WriteLine(message); opF.IWrite += (string message) => ITrace.BeginLine(message); List <Clone> clones = new List <Clone>(); _XFunctions.ListClones(clones, _ZeGame.ID); // tri des doublons / filter duplicates List <Clone> fClones; //fClones= clones.Distinct().ToList(); fClones = FilesFunc.DistinctClones(clones, _ZeGame.FileName); // On va vérifier que chaque clone n'est pas déjà présent et selon déjà copier foreach (Clone zeClone in fClones) { zeClone.ApplicationPath = ReconstructPath(zeClone.ApplicationPath); /* 20/10/2020 * var cloneRes = opF.FileNameCompare(zeClone.ApplicationPath, _Tree.Children[nameof(SubFolder.Roms)].Path); * CopyFile(zeClone.ApplicationPath, _Tree.Children[nameof(SubFolder.Roms)].Path, cloneRes); */ Copy_Handler(zeClone.ApplicationPath, _Tree.Children[nameof(SubFolder.Roms)].Path, "Roms"); } }
/// <summary> /// Gère la copie en examinant la totale similitude des fichiers /// </summary> /// <param name="srcFile"></param> /// <param name="destLocation"></param> /// <param name="mediatype"></param> private bool Copy_Handler(string srcFile, string destLocation, string mediatype) { // 2020 // Test de la similitude en profondeur //FilesFunc.Check4Crash(); OPFiles neoOPF = new OPFiles() { }; neoOPF.IWrite += new RetourMessage((x) => ITrace.BeginLine(x)); neoOPF.IWriteLine += new RetourMessage((x) => ITrace.WriteLine(x)); // Booleen pour déterminer si l'on écrase ou pas bool overW = false; // Vérification en profondeur // Annulé EOPResult res = OPFiles.Copy_DeepVMode(dbPath, destLocation, $"Copy_{mediatype}", () => MD5.Create(), Dcs_Buttons.NoStop, x => ITrace.WriteLine(x)); string fileName = Path.GetFileName(srcFile); string destFile = Path.Combine(destLocation, fileName); EFileResult verif = neoOPF.DeepVerif(srcFile, destFile, () => MD5.Create()); bool copyRes = false; // Stocke le résultat de la copie switch (verif) { case EFileResult.DifferentSize: case EFileResult.DifferentHash: // Check selon les résultats de ce qu'il faut faire // Demande à l'utilisateur // EDestDecision res = MB_Decision.Show($"Copy_Handler: {Lang.Dest_File_Exists}, { Lang.Replace_Question} ?", $"{Lang.Alert} - Copy_Handler", destination: destLocation, buttons: Dcs_Buttons.All); EDestDecision res = MB_Decision.Show($"Copy_Handler: {Lang.Dest_File_Exists}, { Lang.Replace_Question} ?", $"{Lang.Alert} - Copy_Handler", source: srcFile, destination: destFile, buttons: Dcs_Buttons.All); // On passe si l'utilisateur ne veut pas écraser ou renommer /*if (res == EDestDecision.Pass || res == EDestDecision.PassAll) * return; */ // On utilise une fonction de traitement sur le fichier de destination (renommer, envoyer à la poubelle) neoOPF.DestFileAction(res, destFile); // Selon le résultat de la boite on copie ou non le fichier bool?overwrite = Handle_Copy(srcFile, ref destFile, res); if (overwrite != null) { copyRes = FilesFunc.Copy(srcFile, destFile, (bool)overwrite); } break; // Gère si la source a une taille 0 (entre autre) case EFileResult.Source_Error: break; case EFileResult.Destination_Error: case EFileResult.NoMatch: ITrace.WriteLine($"PackMe: Copy of '{fileName}'"); copyRes = FilesFunc.Copy(srcFile, destFile, false); break; default: ITrace.WriteLine($"PackMe: Copy of '{fileName}' avoided"); break; } return(copyRes); // 2020 //2020 EOPResult res = OPFiles.FileNameCompare(dbPath, destLocation, $"Copy_{mediatype}", Dcs_Buttons.NoStop, x => ITrace.WriteLine(x)); // assignation du chemin relatif à la variable // return CopyFile(dbPath, destLocation, res); }