欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-21 09:41:31
前言 默认删除文件的时候 file.delete 是将文件永久删除,如果是一些文档,建议删除到回收站,这样用户可以自己还原 通过 shfileoperation 可以将文...

前言

默认删除文件的时候 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);
  }

尝试运行代码

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

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

microsoft.visualbasic.fileio.filesystem.deletedirectory(filename or folder,
  microsoft.visualbasic.fileio.uioption.onlyerrordialogs, 
  microsoft.visualbasic.fileio.recycleoption.sendtorecyclebin);

代码在github

总结

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