C#删除文件夹和文件到回收站示例

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技术站

(0)
上一篇 2023年6月1日
下一篇 2023年6月1日

相关文章

  • 如何在C#中使用Dapper ORM

    下面是如何在C#中使用Dapper ORM的完整攻略,包含两个示例说明。 Dapper ORM 简介 Dapper ORM 是 .NET 开发中常用的一个轻量级 ORM 框架,它由 StackExchange 团队在开发 StackOverflow 期间所使用的 ORM 技术衍生而来,旨在提供更快、更简单的数据访问体验。 Dapper ORM 安装 Dapp…

    C# 2023年5月31日
    00
  • 详解在.net中读写config文件的各种方法

    以下是详解在 .NET 中读写 config 文件的各种方法的完整攻略。 什么是 config 文件? 在 .NET 中,配置文件(config 文件)是一种文件,其中设置了应用程序的各种配置信息,例如数据库连接字符串、API 密钥、应用程序行为等。 读取配置文件 .NET 中有多种方法可以读取配置文件,以下是两个示例: 1. 使用 Configuratio…

    C# 2023年6月3日
    00
  • 详解C#中通过委托来实现回调函数功能的方法

    详解C#中通过委托来实现回调函数功能的方法: 1.委托和回调函数的概念 在C#中,委托(Delegate)是一种类型,它是一种指向方法的引用,可以将方法作为参数传递。回调函数(Callback Function)是一种方法,它可以作为参数传递给其他方法,然后在适当的时候被调用。 2.使用委托实现回调函数 在C#中,可以使用委托来实现回调函数的功能。首先定义一…

    C# 2023年6月1日
    00
  • 如何在Asp.Net Core中集成Refit

    Asp.Net Core中集成Refit攻略 Refit是一个开源的RESTful API客户端库,它可以帮助我们轻松地使用C#来访问Web API。在Asp.Net Core中,我们可以使用Refit来简化Web API的调用。本攻略将介绍如何在Asp.Net Core中集成Refit。 步骤 以下是在Asp.Net Core中集成Refit的步骤: 安装…

    C# 2023年5月17日
    00
  • asp.net core 中的Jwt(Json Web Token)的使用详解

    以下是“ASP.NET Core中的JWT(JsonWebToken)的使用详解”的完整攻略: 什么是JWT JWT(JsonWebToken)是一种开放标准(RFC 7519),定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。JWT通常用于身份验证和授权。 ASP.NET Core中的JWT的使用 以下是ASP.NET Core…

    C# 2023年5月12日
    00
  • abp(net core)+easyui+efcore实现仓储管理系统——供应商管理升级之上(六十三)

    abp(net core)+easyui+efcore实现仓储管理系统目录 abp(net core)+easyui+efcore实现仓储管理系统——ABP总体介绍(一) abp(net core)+easyui+efcore实现仓储管理系统——解决方案介绍(二) abp(net core)+easyui+efcore实现仓储管理系统——领域层创建实体(三)…

    C# 2023年5月8日
    00
  • C# PLINQ 内存列表查询优化历程

    C# PLINQ 内存列表查询优化历程 问题描述 我们有一个包含1千万个元素的列表,每个元素包含两个整数字段,需要进行查询和统计操作。最初使用普通的Linq查询,但在大数据情况下性能明显不足。 解决方案 我们使用PLINQ(Parallel LINQ,即并行LINQ)来优化查询。PLINQ是Linq的一个扩展,可以在多个线程中并行执行查询,提高查询效率。 步…

    C# 2023年6月7日
    00
  • C# DataTable常见用法汇总

    C# DataTable常见用法汇总 本攻略将详细讲解C# DataTable的常见用法,包括创建、增删改查、排序、筛选、数据类型转换等。 创建DataTable 创建DataTable之前需要先声明DataTable对象和数据列,并在表对象中添加数据列,代码如下: //声明表对象 DataTable dt = new DataTable(); //添加数据…

    C# 2023年5月31日
    00
合作推广
合作推广
分享本页
返回顶部