Ниже приведен пример использования Win32 API функции SHFileOperation для перемещения файла или директории в корзину Windows. В случае перемещения директории в корзину, выбранная директория может содержать файлы и папки.
Текст приложения RemoveToRecycleBin на C#:
using System; using System.Runtime.InteropServices; using System.ComponentModel; namespace RemoveToRecycleBin { /// <summary> /// Summary description for RecycleBin. /// </summary> class RecycleBin { /// <summary> /// The main entry point for the application. /// </summary> [StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)] internal struct SHFILEOPSTRUCT { public IntPtr hWnd; public UInt32 wFunc; public IntPtr pFrom; public IntPtr pTo; public UInt16 fFlags; public Int32 fAnyOperationsAborted; public IntPtr hNameMappings; [MarshalAs(UnmanagedType.LPWStr)] public string lpszProgressTitle; } [System.Runtime.InteropServices.DllImport("shell32.dll", CharSet = CharSet.Unicode, SetLastError=true)] public static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp); [STAThread] static void Main(string[] args) { int res; // полный путь к удаляемому файлу или папке // завершающий символ string strPath = "C:\file_del.txt" + ' '; SHFILEOPSTRUCT FileOp = new SHFILEOPSTRUCT(); FileOp.hWnd = IntPtr.Zero; // удаляем файл / папку FileOp.wFunc = (uint)0x0003; FileOp.pFrom = Marshal.StringToHGlobalUni(strPath); FileOp.pTo = IntPtr.Zero; // без подтверждения пользователя FileOp.fFlags = (ushort)(0x0004 | 0x0040 | 0x0010); FileOp.lpszProgressTitle = ""; FileOp.fAnyOperationsAborted = 0; FileOp.hNameMappings = IntPtr.Zero; res = SHFileOperation(ref FileOp); if (res != 0) { // произошла ошибка Console.WriteLine("Error"); } else { if (FileOp.fAnyOperationsAborted != 0) { // операция была прервана Console.WriteLine("Remove operation aborted"); } } } } }
Постоянные ссылки
При копировании ссылка на TeaM RSN обязательна!
Оставить комментарий
Вы должны войти, чтобы оставить комментарий.