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日

相关文章

  • .NET Core中依赖注入AutoMapper的方法示例

    .NET Core中依赖注入AutoMapper的方法示例 AutoMapper是常用于对象映射的库,它可以方便地将一个对象的属性映射到另一个对象中。使用依赖注入(Dependency Injection,DI)可以将AutoMapper集成到.NET Core中,使其更加易于使用和管理。 第一步:安装AutoMapper和AutoMapper.Extens…

    C# 2023年6月3日
    00
  • C#生成Word文件(图片、文字)

    下面是详细的C#生成Word文件(图片、文字)的攻略: 步骤一:引入依赖库 在C#中生成Word文件需要使用到Office.Interop.Word库,需要在项目中引用该库。可以通过NuGet包管理器或手动引用方式导入。 步骤二:创建Word文档并添加内容 首先,我们需要使用Interop库创建一个Word文档对象,代码如下: using Word = Mi…

    C# 2023年5月15日
    00
  • C#四种计时器Timer的区别和用法

    C#四种计时器Timer的区别和用法 在C#编程中,计时器是很常用的功能。在.NET Framework中,提供了四种不同的计时器Timer。本文将详细讲解这四种计时器的区别和用法。 1. System.Timers.Timer System.Timers.Timer是继承自System.ComponentModel.Component类的一个计时器。它在间…

    C# 2023年6月1日
    00
  • c# 复写Equals方法的实现

    针对您提供的主题“c# 复写Equals方法的实现”的完整攻略,我来介绍一下: 什么是Equals方法? 在C#中,Object类定义了一个名为Equals的方法,该方法用于判断两个对象是否相等。Equals方法的默认实现使用对象的引用来判断两个对象是否相等。如果两个对象引用同一个内存地址则返回true,否则返回false。因此,默认情况下,如果对象在堆上的…

    C# 2023年5月15日
    00
  • C#实现百分比转小数的方法

    C#实现百分比转小数的方法 概述 在实际编码中,常常会遇到需要将百分数转换为小数的情况。本文将介绍C#中实现该功能的方法。 实现方法 方法一 使用数学计算方法将百分数转换为小数。 在C#中,我们可以使用除法将百分数转换为小数,具体方法如下: double percentage = 80.5; // 假设这是80.5% double decimalNumber…

    C# 2023年6月7日
    00
  • C# 各种导出的方法总结

    C#是一门比较流行的编程语言,它常被用于Windows平台的软件开发。C#代码开发完毕后,如何将代码打包成程序或者发布给其他开发者使用呢?这就要用到C#中的导出方法。 本篇文章将为大家总结C#中各种导出方法,包括命令行工具和IDE插件等,以及每种方法的优缺点,希望能够帮助大家更好地理解和使用C#。 1. 命令行工具 1.1. .NET Core SDK .N…

    C# 2023年5月15日
    00
  • .NET7使用HttpClient实现查询天气预报接口

    朋友做网站需要根据城市展示天气预报,找了一圈没有找到靠谱的接口,今天在中央气象台的官网查询某个城市找到了接口,先用postman试了一下居然可以使用,可以查询某个城市7天的天气预报等信息。但是查询编码是气象台自己的编码,在网上搜索了一下居然有这个编码。本文使用HttpClient方法查询这个接口。 天气接口 城市编码 HttpClient是.net core…

    C# 2023年4月19日
    00
  • C#事件中的两个参数详解(object sender,EventArgs e)

    当我们在C#中定义事件时,通常会有两个参数,一个是object类型的sender参数,另一个是派生自EventArgs类的e参数。这两个参数对于事件处理程序来说非常关键,因为它们提供了有关触发事件的对象和事件的详细信息。 在本文中,我们将详细讲解C#事件中的这两个参数。 Object Sender参数 Sender参数指的是引发事件的对象。在事件处理程序中,…

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