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#实现String字符串转化为SQL语句中的In后接的参数详解

    介绍 在编写SQL语句的时候,经常需要使用到In条件查询,而In后接的参数需要转化为字符串。本文主要介绍如何使用C#将String字符串转化为SQL语句中In后接的参数。 实现步骤 第一步:定义一个List集合存储需要转化的参数。 List<string> list = new List<string>(); list.Add(&qu…

    C# 2023年6月8日
    00
  • 使用C#开发OPC Server服务器源码解析

    针对您提出的问题,我准备如下回答: 使用C#开发OPC Server服务器源码解析 什么是OPC Server? OPC全称为”OLE for Process Control”,即过程控制对象连接技术。是Windows系统上常用的一种工业控制网络通信协议。OPC提供了一种标准的框架,使得各种软件应用程序,不管是从监测设备还是控制设备,都可以互通无障碍。OPC…

    C# 2023年5月15日
    00
  • C# WinForm制作登录界面的实现步骤

    下面就是详细讲解C# WinForm制作登录界面的实现步骤的完整攻略。 一、创建WinForm应用程序 首先打开Visual Studio并创建一个新的WinForm应用程序。可以通过依次单击“文件”>“新建”>“项目”>“WinForms应用程序”来创建它。 二、设计登录界面 在新创建的WinForm应用程序中,打开Form1.cs并进行…

    C# 2023年6月6日
    00
  • Entity Framework使用DBContext实现增删改查

    以下是关于Entity Framework使用DbContext实现增删改查的完整攻略。 一、什么是Entity Framework Entity Framework 是微软提供的一种ORM(对象关系映射)框架,它将关系型数据库中的数据转换成.NET中的对象,开发者可以通过对象的方式来操作数据库,并且Entity Framework可以自动将对象转化为SQL…

    C# 2023年6月3日
    00
  • C#随机生成Unicode类型字符串

    下面是C#随机生成Unicode类型字符串的完整攻略。 1. 确定生成的字符串长度 首先需要决定生成的字符串长度。例如,我们想要生成一个长度为6的随机字符串。 int length = 6; 2. 获取随机码点 Unicode是一个支持世界上大多数语言的编码方案。每个字符都有一个唯一的码点,用16进制数字表示。为了生成Unicode类型的字符串,需要从Uni…

    C# 2023年6月8日
    00
  • 最全.NET Core 、.NET 5、.NET 6和.NET 7简介和区别

    .NET是一种用于构建多种应用的免费开源开发平台,可以使用多种语言,编辑器和库开发Web应用、Web API和微服务、云中的无服务器函数、云原生应用、移动应用、桌面应用、Windows WPF、Windows窗体、通用 Windows平台 (UWP)、游戏、物联网 (IoT)、机器学习、控制台应用、Windows服务。框架主要包括:.NET Framewor…

    C# 2023年4月18日
    00
  • .NET Core(.NET6)中gRPC使用实践

    下面是关于“.NET Core(.NET6)中gRPC使用实践”的完整攻略,包含两个示例。 1. 什么是gRPC gRPC是一种高性能、开源、通用的RPC框架,由Google开发。它使用Protocol Buffers作为接口定义语言(IDL),可以在多种语言中使用,包括C#、Java、Python等。gRPC支持双向流、流控制、消息压缩等特性,可以用于构建…

    C# 2023年5月15日
    00
  • C#常用GDI+文字操作汇总

    C#常用GDI+文字操作汇总 简介 GDI+是微软提供的图像编程接口,被广泛应用于.Net框架下的Windows图形化程序开发中,其中文字操作是常见需求之一。本篇文章将介绍一些常用的GDI+文字操作技巧,包括字体、颜色、对齐方式、文本布局、阴影等。 字体 在GDI+中,字体是一个关键的概念,有许多使用字体的属性可调整。下面是一些常用的字体属性。 //创建新字…

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