using System; using System.Runtime.InteropServices; namespace Developpez.Dotnet.System { /// /// Représente une opération de déplacement de fichier qui peut signaler /// sa progression. /// public class FileMoveOperation : FileOperationBase { /// /// Initialise une nouvelle instance de FileMoveOperation /// /// Fichier source /// Fichier destination public FileMoveOperation(string source, string destination) : base(source, destination) { } /// /// Exécute le déplacement /// protected override void ExecuteCore() { var flags = MoveFileFlags.CopyAllowed; if (ReplaceExisting) flags |= MoveFileFlags.ReplaceExisting; bool r = MoveFileWithProgress( Source, Destination, ProgressCallback, IntPtr.Zero, flags); CheckError(r); } /// /// Renvoie FileOperationType.Move /// public override FileOperationType OperationType { get { return FileOperationType.Move; } } #region Interop declarations [DllImport("kernel32", SetLastError = true)] private static extern bool MoveFileWithProgress( string lpExistingFileName, string lpNewFileName, CopyProgressRoutine lpProgressRoutine, IntPtr lpData, MoveFileFlags dwFlags); [Flags] private enum MoveFileFlags { // ReSharper disable UnusedMember.Local ReplaceExisting = 0x01, CopyAllowed = 0x02, DelayUntilReboot = 0x04, WriteThrough = 0x08, CreateHardLink = 0x10, FailIfNotTrackable = 0x20 // ReSharper restore UnusedMember.Local } #endregion } }