Ejemplo n.º 1
0
        /// <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);
            }
        }
Ejemplo n.º 2
0
 /// <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");
         }
     }
 }
Ejemplo n.º 3
0
 // <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);
     }
 }
Ejemplo n.º 4
0
 private static extern int SHFileOperation_x64(ref SHFILEOPSTRUCT_x64 FileOp);
Ejemplo n.º 5
0
 public static extern int SHFileOperation_x64(ref SHFILEOPSTRUCT_x64 FileOp);
Ejemplo n.º 6
0
 /// <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;
     }
 }