c#删除文件和目录到回收站

embedded/2025/1/16 18:54:34/

之前在c++上遇到过这个问题,折腾许久才解决了,这次在c#上再次遇到这个问题,不过似乎容易了一些,亲测代码如下,两种删除方式都写在代码中了。

直接上完整代码:

using Microsoft.VisualBasic.FileIO;
using System;
using System.IO;
using System.Runtime.InteropServices;namespace ceshiConsole
{public class FileIOHelper{[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;}#region Dllimport[DllImport("shell32.dll", CharSet = CharSet.Auto)]public static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);#endregion#region Constpublic const int FO_DELETE = 3;public const int FOF_ALLOWUNDO = 0x40;public const int FOF_NOCONFIRMATION = 0x10;#endregion#region Public Static Methodpublic static void DeleteFileToRecyclebin(string file, Boolean showConfirmDialog = false){SHFILEOPSTRUCT shf = new SHFILEOPSTRUCT();shf.wFunc = FO_DELETE;shf.fFlags = FOF_ALLOWUNDO;if (!showConfirmDialog){shf.fFlags |= FOF_NOCONFIRMATION;}shf.pFrom = file + '\0' + '\0';SHFileOperation(ref shf);}public static bool SendToRecycleBin(string path){bool bRet = true;try{if (File.Exists(path)){FileSystem.DeleteFile(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);}else if (Directory.Exists(path)){FileSystem.DeleteDirectory(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);}else{bRet = false;}}catch (Exception ex){Console.WriteLine($"无法将文件/目录 {path} 移动到回收站: {ex.Message}");bRet = false;}return bRet;}static void Main(string[] args){DeleteFileToRecyclebin(@"C:\Users\autumoon\Desktop\test.txt");SendToRecycleBin(@"C:\Users\autumoon\Desktop\test2.txt");}#endregion}
}


http://www.ppmy.cn/embedded/154458.html

相关文章

WPS excel使用宏编辑器合并 Sheet工作表

使用excel自带的工具合并Sheet表,我们会发现需要开通WPS会员才能使用合并功能; 那么WPS excel如何使用宏编辑器进行合并 Sheet表呢? 1、首先我们要看excel后缀是 .xlsx 还是 .xls ;如果是.xlsx 那么 我们需要修改为 .xls 注…

Python----Python高级(面向对象:对象,类,属性,方法)

一、面向对象简介 Python完全采用了面向对象的思想,是真正面向对象的编程语言,完全支持面向对象的基本功能,例如:继承、多态、封装等。 Python中,一切皆对象。python数据类型、函数等,都是对象。 面向对象&…

多云架构下JuiceFS实现一致性与低延迟数据分发的深度解析

多云架构下JuiceFS实现一致性与低延迟数据分发的深度解析 一、JuiceFS在多云架构中的角色与优势 1. JuiceFS简介 JuiceFS是一个高性能的分布式文件系统,专为云原生环境设计,支持多种公有云和私有云的对象存储服务。它通过将数据存储在对象存储中&…

【C#设计模式(23)——模板方法模式(Template Method Pattern)】

前言 在抽象类中封装算法的结构,具体的实现步骤由子类定义,从而达到不改变算法结构的,允许子类重定义方法内容。代码 public abstract class Teamplate {public void TeamplateMethod(){Step1();Step2();Step3();}protected abstract void …

使用 Docker 在 Alpine Linux 下部署 Caddy 服务器

简介 在现代 web 开发中,选择合适的 web 服务器至关重要。Caddy 是一个功能强大的现代化 HTTP/2 服务器,支持自动 HTTPS,配置简单,适合开发和生产环境。Docker 则为我们提供了一种轻量级的容器化技术,使得应用程序的部…

arcgis三调符号库的使用

1、下载好三调符号库,如下: 2、将.ttf复制到如下路径: 3、把.style文件复制到arcgis的安装路径下的Style文件夹下,如下: 4、打开arcgis软件,添加样式,如下: 5、加载地类数据&#xf…

ARM与x86:架构对比及其应用

典型的服务器架构的x86采用模块化方法,基于带有可更换组件的主板。CPU和其他组件(如显卡和GPU、内存控制器、存储或处理核心)针对特定功能进行了优化,可以轻松更换或扩展。然而,这种便利是有代价的;这些硬件…

python爬虫笔记

urllib库的使用 GET请求 首先,获取网页源码需要模拟浏览器的访问行为对网页进行请求,即使用urllopen打开对应的请求,而请求需要定制一个请求对象,该对象需要统一资源定位器url和请求头headers进行构造,headers可查询…