public void MoveTo(string destDir, MoveOperation operation) { if (!isDir) { WindowsFileSystemApi.MoveFile((FileInfo)adapted, new FileInfo(Path.Combine(destDir, Name)), MoveFileOptions.CopyAllowed | MoveFileOptions.ReplaceExisting, operation.MovedPieceOfFile); } else { MoveDirectory((DirectoryInfo)adapted, destDir, operation); } }
public void CopyTo(string destDir, CopyOperation operation) { if (!isDir) { WindowsFileSystemApi.CopyFile((FileInfo)adapted, new FileInfo(Path.Combine(destDir, Name)), CopyFileOptions.None, operation.CopiedPieceOfFile); } else { CopyDirectory((DirectoryInfo)adapted, destDir, operation); } }
/// <summary> /// Copy directory /// </summary> /// <param name="dir">Directory to copy</param> /// <param name="destination">Destination directory</param> /// <param name="operation">CopyOperation to report changes</param> private void CopyDirectory(DirectoryInfo dir, string destination, CopyOperation operation) { string copyDir = Path.Combine(destination, dir.Name); Directory.CreateDirectory(copyDir); foreach (FileInfo file in dir.GetFiles()) { WindowsFileSystemApi.CopyFile(file, new FileInfo(Path.Combine(copyDir, file.Name)), CopyFileOptions.None, operation.CopiedPieceOfFile); } foreach (DirectoryInfo di in dir.GetDirectories()) { CopyDirectory(di, copyDir, operation); } }
/// <summary> /// Moved directory with content to another place /// </summary> /// <param name="dir">Directory to move</param> /// <param name="destination">Destination path</param> /// <param name="operation">MoveOperation to report progress</param> private void MoveDirectory(DirectoryInfo dir, string destination, MoveOperation operation) { //TODO: Check if is WinAPI function for moving directories string moveDir = Path.Combine(destination, dir.Name); Directory.CreateDirectory(moveDir); foreach (FileInfo file in dir.GetFiles()) { WindowsFileSystemApi.MoveFile(file, new FileInfo(Path.Combine(moveDir, file.Name)), MoveFileOptions.CopyAllowed, operation.MovedPieceOfFile); } foreach (DirectoryInfo di in dir.GetDirectories()) { MoveDirectory(di, moveDir, operation); } dir.Delete(true); }