dotnet如何将文件删除到回收站

前言

默认删除文件的时候 File.Delete 是将文件永久删除,如果是一些文档,建议删除到回收站,这样用户可以自己还原 通过 SHFileOperation 可以将文件放在回收站

本文提供的方法暂时只能在 x86 程序使用,此方法暂时不适合 dotnet core 程序

添加一个帮助类

 public static class RecycleBin
 {
  public static void DeleteToRecycleBin(string file)
  {
   var shf = new SHFILEOPSTRUCT
   {
    wFunc = FO_DELETE,
    fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION,
    // pFrom 需要在字符串后面加两个 \0 才可以 https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/ns-shellapi-_shfileopstructa
    pFrom = file + "\0"
   };
   SHFileOperation(ref shf);
  }

  [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto, Pack = 1)]
  private struct SHFILEOPSTRUCT
  {
   public int hwnd;
   [MarshalAs(UnmanagedType.U4)] public int wFunc;
   public string pFrom;
   public string pTo;
   public short fFlags;
   [MarshalAs(UnmanagedType.Bool)] public bool fAnyOperationsAborted;
   public int hNameMappings;
   public string lpszProgressTitle;
  }

  [DllImport("shell32.dll", CharSet = CharSet.Auto)]
  private static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp);

  private const int FO_DELETE = 3;
  private const int FOF_ALLOWUNDO = 0x40;
  private const int FOF_NOCONFIRMATION = 0x10;
 }

这个类里面只有一个公开方法,要求传入一个文件

下面添加一些测试的代码

  static void Main(string[] args)
  {
   var folder = @"D:\lindexi\github\";
   var file = Path.Combine(folder, "欢迎访问我博客 blog.lindexi.com 里面有大量 UWP WPF 博客.txt");
   Directory.CreateDirectory(folder);
   if (!File.Exists(file))
   {
    File.WriteAllText(file, "欢迎访问我博客 blog.lindexi.com 里面有大量 UWP WPF 博客");
   }

   RecycleBin.DeleteToRecycleBin(file);
  }

尝试运行代码

如果可以引用Microsoft.VisualBasic那么写起来就很清真

Microsoft.VisualBasic.FileIO.FileSystem.DeleteDirectory(filename or folder,
  Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs,
  Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin);

代码在github

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • dotnet封装的kindeditor编辑器控件

    KindEditor很不错,刚接触不久,非常喜欢.KindEditor网站有ForPHP等扩展的,没有ForNet的.我是搞.net开发的,就用它简单封装了一个控件,拖过来即可使用,使用更加简单.源码提供给大家,有兴趣的朋友可以进一步完善. 1.第一次使用,需要配置一下web.config. 复制代码 代码如下: <configSections><section name="KindEditor" type="KindEditorForDotNet.Conf

  • DotNet2.0 生成网站的测试

    在net2中,做了以下测试: 1 菜单"新建 -> 网站" 2 建立页面Default.aspx,类型是页面与代码分开.其中对应的类是"_Default",在namespace"T1"下. 3 建立页面Default2.aspx,类型是页面与代码不分开 4 建立类T1.Class1,编辑器会将Class.cs放在App_Code下. 然后我发布,菜单"生成 -> 发布网站",这时有三个选择项: 允许更新此预编译站点

  • dotNet中的反射用法入门教程

    本文实例讲述了dotNet中的反射用法.分享给大家供大家参考,具体如下: 参考MSDN: ms-help://MS.VSCC.2003/MS.MSDNQTR.2003FEB.2052/cpguide/html/cpcondiscoveringtypeinformationatruntime.htm 提纲: 1. 什么是反射 2. 命名空间与装配件的关系 3. 运行期得到类型信息有什么用 4. 如何使用反射获取类型 5. 如何根据类型来动态创建对象 6. 如何获取方法以及动态调用方法 7. 动态创

  • dotnet如何将文件删除到回收站

    前言 默认删除文件的时候 File.Delete 是将文件永久删除,如果是一些文档,建议删除到回收站,这样用户可以自己还原 通过 SHFileOperation 可以将文件放在回收站 本文提供的方法暂时只能在 x86 程序使用,此方法暂时不适合 dotnet core 程序 添加一个帮助类 public static class RecycleBin { public static void DeleteToRecycleBin(string file) { var shf = new SHFI

  • PowerShell把文件删除到回收站的方法

    某同事辛苦了一个月加班快要完成的设计方案,因为自己一时不小心,直接从公司的共享文件服务器上删除了,无法追回.我也试着建了个共享文件夹,通过资源管理器删除后,也在回收站无法找到,这样也算理解那位女汉子的苦衷了. 我们平时使用PowerShell的Remove-Item命令删除了文件,也是属于彻底删除.其实说真的,如果可以,我很想对招远快餐店的6名凶手,执行remove命令,不,直接kill命令. 那怎样在PowerShell中将文件安全地删除进回收站?显然需要调用Windows的Com组件了: 复

  • Linux文件删除后空间未释放问题详解

    前言 当系统空间使用量过大需要清理空间或者清理某个文件时,有时会出现执行了删除命令之后磁盘空间并没有释放,很多人首次遇到该情况时会比较困惑,在考虑是不是像windows系统的回收站一样,删除只是逻辑删除到回收站一样?其实不然,linux的回收站功能想了解的可以与我沟通或查资料了解一下,也是个比较实用的方法,此处我们主要实践文件删除后空间未释放问题. 1. 实验准备 想模拟该场景的方式很多,主要是实现文件被占用的场景.最简单的方式是拷贝文件,另一个常见方式是对于会编程或shell功底较好的同学可以

  • cmd del命令 文件删除

    del命令的用法很简单,使用 "del 文件路径" 的格式就可以了.比如,想删除D盘根目录下的test.txt,使用del d:\test.txt即可. 但是,并不是所有的文件都可以只用del命令就可以搞定,比如具有隐藏属性.只读属性或者系统属性的文件,假如d:\test.txt具有隐藏属性,如果仅仅是 del d:\test.txt 的话,d:\test.txt会纹丝不动.如何删除它?这时候,就需要对del加上一些辅助参数了,隐藏属性是hidden,使用del /a:h,只读属性是r

  • asp.net下文件上传和文件删除的代码

    文件上传 HttpPostedFile postFile = Request.Files["imgFile"]; if(postFile.FileName!=String.Empty){        ex=postFile.FileName.Substring(postFile.FileName.LastIndexOf("."));        fileName= DateTime.Now.ToString("yyyyMMdd") + ex;

  • dos 文件删除 del命令

    del命令的用法很简单,使用 "del 文件路径" 的格式就可以了.比如,想删除D盘根目录下的test.txt,使用del d:\test.txt即可. 但是,并不是所有的文件都可以只用del命令就可以搞定,比如具有隐藏属性.只读属性或者系统属性的文件,假如d:\test.txt具有隐藏属性,如果仅仅是 del d:\test.txt 的话,d:\test.txt会纹丝不动.如何删除它?这时候,就需要对del加上一些辅助参数了,隐藏属性是hidden,使用del /a:h,只读属性是r

  • 浅谈Linux下通过find命令进行rm文件删除的小技巧

    我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作写成脚本,就会遇到一些麻烦,本文通过一个例子为大家进行介绍. 系统环境: SUSE Linux Enterprise Server 11 或 Red Hat Enterprise Linux 问题症状: 客户现场有一个自动化的脚本,有以下的find语句,每天运行以删除某个目录下7天以前的文件或目录,

  • python实现截取屏幕保存文件,删除N天前截图的例子

    我就废话不多说,直接上代码吧! from PIL import ImageGrab import time import schedule import os import shutil import datetime days = -3 # 截屏 def savepic(): im = ImageGrab.grab() now = time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime()) day = time.strftime(&quo

  • C# 下载文件 删除文件 写入文本的实例

    由于经常用到文件处理,便自己封装了下 分享给大家. 包含写入文本 批量删除文件 下载文件 .--可直接使用 /// <summary> /// 写入到txt /// </summary> /// <param name="savePath"></param> /// <param name="content"></param> public static void WriteInTxt(stri

  • Git基础学习之文件删除操作命令详解

    目录 1.删除文件说明 2.删除文件操作 (1)仅删除暂存区的文件 (2)完全删除文件 3.本文用到的命令总结 1.删除文件说明 在Git工作目录中要删除某个文件,首先要清楚该文件所处的状态. 若要是该文件未被Git管理,在工作区直接进行删除即可.(不演示) 但是,若该文件已经经过多次git add与git commit操作后,就必须要从已跟踪文件清单中删除(确切地说,是在暂存区中删除),然后提交. 可以用git rm命令完成此项工作,并连带从工作目录中删除指定的文件,这样文件之后就不会出现在未

随机推荐