/// <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) { HeTrace.Write($"[CopyFiles] Copy of the file '{Path.GetFileName(fileSrc)}': "); try { File.Copy(fileSrc, destFile, overWrite); HeTrace.EndLine("Successful"); return(true); } catch (IOException e) { HeTrace.EndLine("Error"); HeTrace.WriteLine(e.Message); return(false); } }
internal void SimpleCopyManager(string fileSrc, ref E_Decision previousDec, string destFile) { if (CancelToken.IsCancellationRequested) { throw new OperationCanceledException("Operation stopped"); } if (!destFile.Contains(_WFolder)) { throw new Exception($"[CreateFolders] Erreur la chaine '{destFile}' ne contient pas '{_WFolder}'"); } // Création des dossiers string destFolder = Path.GetDirectoryName(destFile); if (!Directory.Exists(destFolder)) { Directory.CreateDirectory(destFolder); } //string destFile = Path.Combine(destFolder, Path.GetFileName(fileSrc)); E_Decision?conflictDec = previousDec; bool overwrite = false; if (File.Exists(destFile)) { HeTrace.Write($"[CopyHandler] Destination file exists... ", this); if (conflictDec == E_Decision.None) { conflictDec = PackMe_IHM.Ask4_FileConflict(fileSrc, destFile, E_DxConfB.OverWrite | E_DxConfB.Pass | E_DxConfB.Trash); // Mémorisation pour les futurs conflits switch (conflictDec) { case E_Decision.PassAll: case E_Decision.OverWriteAll: case E_Decision.TrashAll: previousDec = conflictDec == null ? E_Decision.None : (E_Decision)conflictDec; break; } } HeTrace.EndLine(conflictDec.ToString(), this); switch (conflictDec) { case E_Decision.Pass: case E_Decision.PassAll: SetStatus(this, new StateArg($"Pass: {fileSrc}", CancelFlag)); return; case E_Decision.OverWrite: case E_Decision.OverWriteAll: SetStatus(this, new StateArg($"OverWrite: {destFile}", CancelFlag)); overwrite = true; break; case E_Decision.Trash: case E_Decision.TrashAll: SetStatus(this, new StateArg($"Trash: {destFile}", CancelFlag)); OpDFiles.Trash(destFile); break; } } // --- Copie SetStatus(this, new StateArg($"Copy {fileSrc}", CancelFlag)); SetProgress(this, new ProgressArg(0, 1, CancelFlag)); FilesFunc.Copy(fileSrc, destFile, overwrite); SetProgress(this, new ProgressArg(1, 1, CancelFlag)); // --- Vérification des sommes this.SetStatus(this, new StateArg($"Copy verification", CancelFlag)); //this.SetMaximum(this, 100); //bool? res = _ObjectFiles.VerifByHash_Sync(fileSrc, destFile, () => MD5.Create()); //var res = _ObjectFiles.DeepVerif(fileSrc, destFile, () => MD5.Create()); this.SetStatus(this, new StateArg($"Check verif: {res}", CancelFlag)); //this.UpdateProgress?.Invoke(100); }
/// <summary> /// Format paths to seek the main and show him as hard and relative /// </summary> /// <param name="v"></param> internal void FormatMainPaths(string sep) { HeTrace.WriteLine("Format main paths", 5); // On détermine le path en selon l'emplacement de Launchbox if (String.IsNullOrEmpty(PlatformObject.Folder)) { CHardLink = Global.LaunchBoxRoot; // On récupère avec le core car ça correspond pas sinon CRelatLink = @".\"; return; } // Détermination du chemin réel si c'est un chemin relatif string platformPath = null; if (PlatformObject.Folder.StartsWith('.') || PlatformObject.Folder.Substring(1, 2) != @":\") { //platformPath = Path.GetFullPath(PlatformObject.Folder, Global.LaunchBoxPath); platformPath = Path.GetFullPath(PlatformObject.Folder, Global.LaunchBoxRoot); } else { platformPath = PlatformObject.Folder; } #region Remplace FillInformation de l'ancienne version HeTrace.WriteLine($@"PlatformFolder: '{PlatformObject.Folder}'"); // Envnew HeTrace.WriteLine(@"Search main paths"); // Envnew #region Recherche du dossier hard HeTrace.Write(@"--- Seek of HardLink: "); string[] foldersArr = platformPath.Split(sep); // Sur windows le getfullpath a ramené le chemin avec des \ // Ici une erreur peut se produire si on a un chemin de type "G:" CHardLink = String.Join(sep, foldersArr, 0, foldersArr.Length - 2); HeTrace.EndLine($"'{CHardLink}'"); // Envnew #endregion #region conversion en dur du lien vers le dossier actuel // Vérification que le path est sur le même chemin que l'application DriveInfo driveApp = new DriveInfo(Global.LaunchBoxPath); DriveInfo driveFolder = new DriveInfo(platformPath); if (driveApp.Name.Equals(driveFolder.Name)) { HeTrace.Write(@"--- Transformation HardLink RelatLink: "); CRelatLink = DxPath.To_Relative(Global.LaunchBoxRoot, CHardLink); //CRelatLink = Path.GetRelativePath(Global.LaunchBoxPath, CHardLink); HeTrace.WriteLine($"'{CRelatLink}'"); // Envnew } else { HeTrace.WriteLine(@"--- RelatLink impossible different drives letters "); // Envnew } //tmp = tmp.Replace($@"\{OldPlatformObject.Name}", ""); //CRelatLink = tmp; //tmp = null; #endregion #endregion Remplace FillInformation de l'ancienne version }