Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        /// <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
        }