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() { int flags = MOVEFILE_COPY_ALLOWED | MOVEFILE_WRITE_THROUGH; if (ReplaceExisting) flags |= MOVEFILE_REPLACE_EXISTING; 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, int dwFlags); private const int MOVEFILE_REPLACE_EXISTING = 0x01; private const int MOVEFILE_COPY_ALLOWED = 0x02; private const int MOVEFILE_DELAY_UNTIL_REBOOT = 0x04; private const int MOVEFILE_WRITE_THROUGH = 0x08; private const int MOVEFILE_CREATE_HARDLINK = 0x10; private const int MOVEFILE_FAIL_IF_NOT_TRACKABLE = 0x20; #endregion } }