visual reciclaje papelera limpiar ingles como c# .net c++ windows io

c# - reciclaje - como limpiar un label en visual basic



¿Cómo colocas un archivo en la papelera de reciclaje en lugar de eliminarlo? (3)

Solución programática por supuesto ...


Necesita profundizar en el código no administrado. Aquí hay una clase estática que he estado usando:

public static class Recycle { private const int FO_DELETE = 3; private const int FOF_ALLOWUNDO = 0x40; private const int FOF_NOCONFIRMATION = 0x0010; [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)] public struct SHFILEOPSTRUCT { public IntPtr hwnd; [MarshalAs(UnmanagedType.U4)] public int wFunc; public string pFrom; public string pTo; public short fFlags; [MarshalAs(UnmanagedType.Bool)] public bool fAnyOperationsAborted; public IntPtr hNameMappings; public string lpszProgressTitle; } [DllImport("shell32.dll", CharSet = CharSet.Auto)] static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp); public static void DeleteFileOperation(string filePath) { SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT(); fileop.wFunc = FO_DELETE; fileop.pFrom = filePath + ''/0'' + ''/0''; fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; SHFileOperation(ref fileop); } }

Apéndice:

  • Tsk tsk @ Jeff por "usar Microsoft.VisualBasic" en el código C #.
  • Tsk tsk @ MS por poner todas las cosas buenas en el espacio de nombres de VisualBasic.


La mejor forma que he encontrado es utilizar la función VB FileSystem.DeleteFile .

Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(file.FullName, Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin);

Requiere agregar Microsoft.VisualBasic como referencia, pero esto es parte del framework .NET y, por lo tanto, no es una dependencia adicional.

Las soluciones alternativas requieren una P / invocación a SHFileOperation , así como la definición de todas las diversas estructuras / constantes. Incluir Microsoft.VisualBasic es mucho más limpio en comparación.