C#删除文件夹和文件到回收站示例
在C#中,如果我们要删除文件夹和文件,一般的做法是使用System.IO的相关类,例如Directory和File类,但是这样会直接将文件和文件夹永久删除,对于一些重要的文件或者文件夹,我们希望删除后能够先将其放到回收站中,避免误删,这时候就要使用Windows操作系统自带的Shell API。
使用Shell API删除文件到回收站
如果我们要删除单个文件到回收站中,我们可以使用Shell API中的SHFileOperation函数进行操作,以下是一个简单的示例代码:
[DllImport("shell32.dll", CharSet = CharSet.Unicode)]
static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
public uint wFunc;
public string pFrom;
public string pTo;
public ushort fFlags;
public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
public string lpszProgressTitle;
}
private void DeleteFileToRecycleBin(string fileName)
{
SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT();
fileop.wFunc = 0x003;//删除文件到回收站
fileop.pFrom = fileName + '\0';//多个文件以 \0 分隔
fileop.fFlags = 0;//不确认删除,否则需要用户确认
SHFileOperation(ref fileop);
}
在上面的示例代码中,我们首先定义了SHFILEOPSTRUCT结构体,该结构体定义了一些删除文件到回收站时需要使用的参数,比如文件路径,删除方式等。接着我们使用DllImport特性导入了Shell32.dll中的SHFileOperation函数,并在DeleteFileToRecycleBin函数中进行操作。在操作中,我们将需要删除的文件路径传入pFrom参数,将要执行的操作类型传入wFunc参数,如果需要用户确认删除操作,可以将fFlags设为FOF_ALLOWUNDO。
使用Shell API删除目录到回收站
如果我们有一个文件夹需要删除,并将其放入回收站中,那么就需要使用Shell API中的SHFileOperation函数和枚举SHFileOperationFlags。以下是一个简单的示例代码:
[DllImport("shell32.dll")]
static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp);
[StructLayout(LayoutKind.Sequential)]
public struct SHFILEOPSTRUCT
{
public IntPtr hwnd;
public uint wFunc;
public string pFrom;
public string pTo;
public ushort fFlags;
public bool fAnyOperationsAborted;
public IntPtr hNameMappings;
public string lpszProgressTitle;
}
[Flags]
public enum SHFileOperationFlags : ushort
{
FOF_SILENT = 0x0004, //不出现确认或者询问用户即执行
FOF_NOCONFIRMATION = 0x0010, //不出现任何对话框
FOF_ALLOWUNDO = 0x0040, //文件删除后可以放到回收站
FOF_NOERRORUI = 0x0400, //不出现错误对话框
}
private void DeleteDirectoryToRecycleBin(string target_dir)
{
if (!Directory.Exists(target_dir))
{
return;
}
SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT();
fileop.wFunc = 0x003;//删除文件到回收站
fileop.pFrom = target_dir + '\0';//多个文件以 \0 分隔
fileop.fFlags = (ushort)(SHFileOperationFlags.FOF_ALLOWUNDO | SHFileOperationFlags.FOF_NOCONFIRMATION);
SHFileOperation(ref fileop);
}
在上面的示例代码中,我们将SHFILEOPSTRUCT中的wFunc设置为0x003表示删除文件到回收站,同时设置了fFlags为SHFileOperationFlags.FOF_ALLOWUNDO和SHFileOperationFlags.FOF_NOCONFIRMATION,其中SHFileOperationFlags.FOF_ALLOWUNDO表示允许文件删除后放到回收站中,SHFileOperationFlags.FOF_NOCONFIRMATION表示不出现任何对话框,这样文件夹将会被直接删除到回收站中。
总结
使用C#删除文件夹和文件到回收站示例,需要使用到Windows Shell API中的SHFileOperation函数和相关参数,将文件和文件夹移动到回收站中。我们需要清楚地了解各个参数的含义和作用,才能正确地实现移动文件和文件夹到回收站的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#删除文件夹和文件到回收站示例 - Python技术站