Eric Bergman-Terrell's Blog

.NET Programming Tip: How to Programmatically Send Folders and/or Files to the Recycle Bin
October 4, 2010

Use the SHFileOperation API to send a file or folder to the Recycle Bin. In the SHFILEOPSTRUCT that you pass to SHFileOperation, set the pFrom field to a string containing each file or folder path seperated by a null character. Make sure that there is an additional null character at the end of the pFrom string. This code is adapted from source code written by Jeff Key (author of Snippet Compiler).

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);

...

SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT();
fileop.wFunc = FO_DELETE;
fileop.pFrom = filePath + '\0' + '\0';
fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;

SHFileOperation(ref fileop);
Keywords: Recycle Bin, SHFileOperation, SHFILEOPSTRUCT

Reader Comments

Comment on this Blog Post

Recent Posts

TitleDate
.NET Public-Key (Asymmetric) Cryptography DemoJuly 20, 2025
Raspberry Pi 3B+ Photo FrameJune 17, 2025
EBTCalc (Android) Version 1.53 is now availableMay 19, 2024
Vault 3 Security EnhancementsOctober 24, 2023
Vault 3 is now available for Apple OSX M2 Mac Computers!September 18, 2023
Vault (for Desktop) Version 0.77 ReleasedMarch 26, 2023
EBTCalc (Android) Version 1.44 is now availableOctober 12, 2021