public static void ShellDelete(string FullPath, RecycleOption recycle, UICancelOption OnUserCancel, FileOrDirectory FileOrDirectory) { ShFileOperationFlags operationFlags = ShFileOperationFlags.FOF_SILENT | ShFileOperationFlags.FOF_NOCONFIRMATION; if (recycle == RecycleOption.SendToRecycleBin) { operationFlags |= ShFileOperationFlags.FOF_ALLOWUNDO; } ShellFileOperation(SHFileOperationType.FO_DELETE, operationFlags, FullPath, null, OnUserCancel, FileOrDirectory); }
public static void ShellFileOperation(SHFileOperationType OperationType, ShFileOperationFlags OperationFlags, string FullSource, string FullTarget, UICancelOption OnUserCancel, FileOrDirectory FileOrDirectory) { int num; new UIPermission(UIPermissionWindow.SafeSubWindows).Demand(); FileIOPermissionAccess noAccess = FileIOPermissionAccess.NoAccess; if (OperationType == SHFileOperationType.FO_COPY) { noAccess = FileIOPermissionAccess.Read; } else if (OperationType == SHFileOperationType.FO_MOVE) { noAccess = FileIOPermissionAccess.Write | FileIOPermissionAccess.Read; } else if (OperationType == SHFileOperationType.FO_DELETE) { noAccess = FileIOPermissionAccess.Write; } string fullDirectoryPath = FullSource; if (((OperationType == SHFileOperationType.FO_COPY) || (OperationType == SHFileOperationType.FO_MOVE)) && fullDirectoryPath.EndsWith("*", StringComparison.Ordinal)) { fullDirectoryPath = RemoveEndingSeparator(FullSource.TrimEnd(new char[] { '*' })); } if (FileOrDirectory == FileOrDirectory.Directory) { DemandDirectoryPermission(fullDirectoryPath, noAccess); } else { new FileIOPermission(noAccess, fullDirectoryPath).Demand(); } if (OperationType != SHFileOperationType.FO_DELETE) { if (FileOrDirectory == FileOrDirectory.Directory) { DemandDirectoryPermission(FullTarget, FileIOPermissionAccess.Write); } else { new FileIOPermission(FileIOPermissionAccess.Write, FullTarget).Demand(); } } SHFILEOPSTRUCT lpFileOp = GetShellOperationInfo(OperationType, OperationFlags, FullSource, FullTarget); new SecurityPermission(SecurityPermissionFlag.UnmanagedCode).Assert(); try { num = SHFileOperation(ref lpFileOp); SHChangeNotify(145439, 3, IntPtr.Zero, IntPtr.Zero); } catch (Exception) { throw; } finally { CodeAccessPermission.RevertAssert(); } if (lpFileOp.fAnyOperationsAborted) { if (OnUserCancel == UICancelOption.ThrowException) { throw new OperationCanceledException(); } } else if (num != 0) { ThrowWinIOError(num); } }
private static SHFILEOPSTRUCT GetShellOperationInfo(SHFileOperationType OperationType, ShFileOperationFlags OperationFlags, string[] SourcePaths, [Optional, DefaultParameterValue(null)] string TargetPath) { SHFILEOPSTRUCT shfileopstruct2 = new SHFILEOPSTRUCT(); shfileopstruct2.wFunc = (uint)OperationType; shfileopstruct2.fFlags = (ushort)OperationFlags; shfileopstruct2.pFrom = GetShellPath(SourcePaths); if (TargetPath == null) { shfileopstruct2.pTo = null; } else { shfileopstruct2.pTo = GetShellPath(TargetPath); } shfileopstruct2.hNameMappings = IntPtr.Zero; try { shfileopstruct2.hwnd = Process.GetCurrentProcess().MainWindowHandle; } catch (Exception exception) { if ((!(exception is SecurityException) && !(exception is InvalidOperationException)) && !(exception is NotSupportedException)) { throw; } shfileopstruct2.hwnd = IntPtr.Zero; } shfileopstruct2.lpszProgressTitle = string.Empty; return(shfileopstruct2); }
private static SHFILEOPSTRUCT GetShellOperationInfo(SHFileOperationType OperationType, ShFileOperationFlags OperationFlags, string SourcePath, [Optional, DefaultParameterValue(null)] string TargetPath) { return(GetShellOperationInfo(OperationType, OperationFlags, new string[] { SourcePath }, TargetPath)); }