/// <summary> /// Send file to recycle bin /// </summary> /// <param name="path">Location of directory or file to recycle</param> /// <param name="flags">FileOperationFlags to add in addition to FOF_ALLOWUNDO</param> public static bool Delete(string path, FileOperationFlags flags) { try { if (IsWOW64Process()) { SHFILEOPSTRUCT_x64 fs = new SHFILEOPSTRUCT_x64(); fs.wFunc = FileOperationType.FO_DELETE; // important to double-terminate the string. fs.pFrom = path + '\0' + '\0'; fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags; SHFileOperation_x64(ref fs); } else { SHFILEOPSTRUCT_x86 fs = new SHFILEOPSTRUCT_x86(); fs.wFunc = FileOperationType.FO_DELETE; // important to double-terminate the string. fs.pFrom = path + '\0' + '\0'; fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags; SHFileOperation_x86(ref fs); } return(true); } catch { return(false); } }
// <summary> /// Эта функция отправляет файл или папку в корзину /// </summary> /// <param name="path">Полное имя файла или папки, которую нужно удалить</param> /// <param name="flags">FileOperationFlags в дополнение к флагу FOF_ALLOWUNDO, /// который уже задан</param> public static bool SendToRecycle(string path, FileOperationFlags flags) { try { //если 64-битная система if (IsWOW64Process()) { //создаем новую структуру SHFILEOPSTRUCT_x64 fs = new SHFILEOPSTRUCT_x64(); //указываем, что файл будет удаляться fs.wFunc = FileOperationType.FO_DELETE; //Непонятно, почему, но если функции передать структуру, в которой указан "нормальный" //путь, то произойдет ошибка (на этом форуме четыре года назад в разделе Visual C++ //спрашивали как раз по этому поводу) fs.pFrom = path + '\0' + '\0'; //установка флагов fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags; //выполнение функции SHFileOperation_x64(ref fs); } else { //система 32-битная. Здесь все так же, как для 64-битной системы, только структура и //функция уже 32-битные SHFILEOPSTRUCT_x86 fs = new SHFILEOPSTRUCT_x86(); fs.wFunc = FileOperationType.FO_DELETE; fs.pFrom = path + '\0' + '\0'; fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags; SHFileOperation_x86(ref fs); } //все прошло успешно, возвращаем true return(true); } catch { //произошла какая-то ошибка, возвращаем false return(false); } }
private static extern int SHFileOperation_x86(ref SHFILEOPSTRUCT_x86 FileOp);
public static extern int SHFileOperation_x86(ref SHFILEOPSTRUCT_x86 FileOp);
/// <summary> /// Эта функция отправляет файл или папку в корзину /// </summary> /// <param name="path">Полное имя файла или папки, которую нужно удалить</param> /// <param name="flags"> FileOperationFlags в дополнение к флагу FOF_ALLOWUNDO,FOF_SILENT,FOF_NOCONFIRMATION который уже задан</param> public static void DeleteToRecycleBin(string path, FileOperationFlags flags) { int result; bool operationsAborted; //если 64-битная система if (IsWOW64Process()) { //создаем новую структуру SHFILEOPSTRUCT_x64 fs = new SHFILEOPSTRUCT_x64(); //указываем, что файл будет удаляться fs.wFunc = FileOperationType.FO_DELETE; //Непонятно, почему, но если функции передать структуру, в которой указан "нормальный" //путь, то произойдет ошибка fs.pFrom = path + '\0' + '\0'; //установка флагов fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | FileOperationFlags.FOF_SILENT | FileOperationFlags.FOF_NOCONFIRMATION | flags; //выполнение функции result = SHFileOperation_x64(ref fs); operationsAborted = fs.fAnyOperationsAborted; } else { //система 32-битная. Здесь все так же, как для 64-битной системы, только структура и //функция уже 32-битные SHFILEOPSTRUCT_x86 fs = new SHFILEOPSTRUCT_x86(); fs.wFunc = FileOperationType.FO_DELETE; fs.pFrom = path + '\0' + '\0'; fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | FileOperationFlags.FOF_SILENT | FileOperationFlags.FOF_NOCONFIRMATION | flags;//без подтверждения пользователя(ushort)(0x0004 | 0x0040 | 0x0010); result = SHFileOperation_x86(ref fs); operationsAborted = fs.fAnyOperationsAborted; } if (result != 0) { // произошла ошибка Console.WriteLine("Delete to RecycleBin Error"); throw new Exception("Delete to RecycleBin Error (result = " + result + ")"); } else { if (operationsAborted) { // операция была прервана Console.WriteLine("Remove operation aborted"); } } }
/// <summary> /// Send file to recycle bin /// </summary> /// <param name="path">Location of directory or file to recycle</param> /// <param name="flags">FileOperationFlags to add in addition to FOF_ALLOWUNDO</param> public static bool Delete(string path, FileOperationFlags flags) { try { if (IsWOW64Process()) { SHFILEOPSTRUCT_x64 fs = new SHFILEOPSTRUCT_x64(); fs.wFunc = FileOperationType.FO_DELETE; // important to double-terminate the string. fs.pFrom = path + '\0' + '\0'; fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags; SHFileOperation_x64(ref fs); } else { SHFILEOPSTRUCT_x86 fs = new SHFILEOPSTRUCT_x86(); fs.wFunc = FileOperationType.FO_DELETE; // important to double-terminate the string. fs.pFrom = path + '\0' + '\0'; fs.fFlags = FileOperationFlags.FOF_ALLOWUNDO | flags; SHFileOperation_x86(ref fs); } return true; } catch { return false; } }