zoukankan      html  css  js  c++  java
  • 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 需要在字符串后面加两个  才可以 https://docs.microsoft.com/en-us/windows/desktop/api/shellapi/ns-shellapi-_shfileopstructa
                    pFrom = file + ""
                };
                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:lindexigithub";
                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

    c# - Send a File to the Recycle Bin - Stack Overflow

    Delete files or folders to recycle bin in C#

    我搭建了自己的博客 https://blog.lindexi.com/ 欢迎大家访问,里面有很多新的博客。只有在我看到博客写成熟之后才会放在csdn或博客园,但是一旦发布了就不再更新

    如果在博客看到有任何不懂的,欢迎交流,我搭建了 dotnet 职业技术学院 欢迎大家加入

    知识共享许可协议
    本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名林德熙(包含链接:http://blog.csdn.net/lindexi_gd ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系

  • 相关阅读:
    jsp mysql 配置线程池
    服务端 模拟 检测 攻击。。乱写
    硕思闪客精灵 7.2 破解版
    unity UnityAwe 插件
    smartfoxserver 2x 解决 Math NAN
    unity 断点下载
    java 监听文件目录修改
    wind7 64 setup appjs
    sfs2x 修改jvm 内存
    unity ngui 解决图层问题
  • 原文地址:https://www.cnblogs.com/lindexi/p/12086761.html
Copyright © 2011-2022 走看看