If we delete file or folder using C# code, it will be deleted from the system permanently. Yesterday, I was searching for a solution which helps me to delete file to recycle bin. There is no direct API* available in .NET which helps me to achieve this. Later, I found an option using SHFileOperation function. And here is the implementation, which helps to delete file or folder to Recyclebin.
[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)]
public static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);
public const int FO_DELETE = 3;
public const int FOF_ALLOWUNDO = 0x40;
public const int FOF_NOCONFIRMATION = 0x10;
And you can use this function like this:
var shf = new Win32.SHFILEOPSTRUCT();
shf.wFunc = Win32.FO_DELETE;
shf.fFlags = Win32.FOF_ALLOWUNDO;
shf.pFrom = @"c:\myfile.txt" + '\0' + '\0';
Win32.SHFileOperation(ref shf);
The pFrom
parameter can be either file or folder.
Happy programming! :)
* This is not 100% true. We can do this by using Microsoft.VisualBasic
namespace. And here is the implementation.
using Microsoft.VisualBasic;
string path = @"c:\myfile.txt";
FileIO.FileSystem.DeleteDirectory(path,
FileIO.UIOption.OnlyErrorDialogs,
RecycleOption.SendToRecycleBin);
Related Content
- CaptureItPlus – A screen capture utility
- How to use TaskDialog API in C#
- How to turn off monitor programmatically using C#
- Setting an application on top other windows using C#
- How to record sound using C#