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
}
}