c# 如何将文件删除到回收站(文件操作)

长空玮

很多一部分网上回答都是调用System.VisualBasic的,这部分我就不粘了,毕竟不是使用VB的。以下2种方法基本相同,主要是鉴于构造不同,决定都附上。

1.(http://www.dotblogs.com.tw/larrynung/archive/2012/09/25/75026.aspx?fid=43791)

using System;
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);}#endregion}}

2.该方法转载太多,就找了个百度的链接了(http://zhidao.baidu.com/link?url=jnBCVYOf4yhGdf_YjDFZZQca1EsBixJ4LB1e8lmKotTMjrVI2StNMkswmSlQKUrIkA1_O9RMFsnUd9f_CYWTXa)

  1. using System;

  2. using System.Collections.Generic;

  3. using System.Linq;

  4. using System.Text;

  5. using System.Runtime.InteropServices;

  6. namespace ceshiConsole

  7. {

  8. public class Cleaner

  9. {

  10. private const int FO_DELETE = 0x3;

  11. private const ushort FOF_NOCONFIRMATION = 0x10;

  12. private const ushort FOF_ALLOWUNDO = 0x40;

  13. [DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)]

  14. private static extern int SHFileOperation([In, Out] _SHFILEOPSTRUCT str);

  15. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]

  16. public class _SHFILEOPSTRUCT

  17. {

  18. public IntPtr hwnd;

  19. public UInt32 wFunc;

  20. public string pFrom;

  21. public string pTo;

  22. public UInt16 fFlags;

  23. public Int32 fAnyOperationsAborted;

  24. public IntPtr hNameMappings;

  25. public string lpszProgressTitle;

  26. }

  27. public static int Delete(string path)

  28. {

  29. _SHFILEOPSTRUCT pm = new _SHFILEOPSTRUCT();

  30. pm.wFunc = FO_DELETE;

  31. pm.pFrom = path + '\0';

  32. pm.pTo = null;

  33. pm.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;

  34. return SHFileOperation(pm);

  35. }

  36. }

  37. }

以上在ceshiConsole项目中实现。

以上2中方法的主要区别在于,前者使用的是struct SHFILEOPSTRUCT,后者使用的是class _SHFILEOPSTRUCT。与VB中FileIO.FileSystem.DeleteFile的区别在于,CS调用删除时,如果出错(比如文件不存在,etc)时,不报Exception异常,而是通过SHFileOperation的返回值来区别错误(异常)类型的;而VB报异常。

附:

1.关于SHFileOperation函数的补充

2.C# 删除移动文件(附带弹窗和进度提示)

C#删除文件和文件夹到回收站

如果使用C#代码来删除文件或是文件夹。会将文件和文件夹直接删除,而不是删除到回收站。可以调用Microsoft.VisualBasic.dll提供的方法。

首先对项目添加名为Microsoft.VisualBasic.dll的引用,然后添加命名空间

using Microsoft.VisualBasic.FileIO;

最后示例代码如下:

using System;
using Microsoft.VisualBasic.FileIO;
names paceleaver{class Program{static void Main(string[]args) {Console.WriteLine("删除文件到回收站");stringfilepath="leaver.txt";FileSystem.DeleteFile(filepath,UIOption.OnlyErrorDialogs,RecycleOption.SendToRecycleBin);Console.WriteLine("删除文件完成");Console.WriteLine("删除文件夹到回收站");stringdirpath="leaver";FileSystem.DeleteDirectory(dirpath,UIOption.OnlyErrorDialogs,RecycleOption.SendToRecycleBin);Console.WriteLine("删除文件夹完成");}}
}

很简单。。就不多说了。。

C#删除文件和文件夹到回收站相关推荐

  1. php删除到回收站代码,如何找回回收站删除的文件PHP,删除文件与文件夹操作

    如何找回回收站删除的文件 PHP 删除文件与文件夹操作 unlink与rmdir这两个函数的使用 先看一下代码 代码如下: function deldir($dir) { //先删除目录下的文件: $ ...

  2. php的回收站怎么做,如何找回回收站删除的文件 PHP,删除文件与文件夹操作

    如何找回回收站删除的文件 PHP 删除文件与文件夹操作 unlink与rmdir这两个函数的使用 先看一下代码 代码如下: function deldir($dir) { //先删除目录下的文件: $ ...

  3. 在计算机窗口中什么中的文件不能被删除,在Windows操作系统中,“回收站”可以恢复(1)上使用键删除的文件或文件夹。在“我的电脑”窗口中,...

    55题库为您解答: 正确答案:B 解析:本题考查Windows操作系统应用的基本知识.在Windows操作系统中,"回收站"可以恢复硬盘上使用Del>键删除的文件或文件夹.& ...

  4. sql delete删除的数据怎么恢复_如何恢复按下Shift + DELETE键永久删除的文件和资料夹?...

    简单删除和Shift+Delete永久删除 想删除电脑上的任何文件,有以下两种方式: ① 按「DELETE」键简单删除文件.在这种模式下,文件被移动到回收站.此时,如果我们想要恢复已删除的文件和资料夹 ...

  5. IO流中文件和文件夹的删除程序举例

    /* * 删除功能(无论是文件夹还是文件都是用delete方法,仅仅能一级一级的删除.):public boolean delete() * * 注意: * A:假设你创建文件或者目录忘了写盘符路径, ...

  6. ubuntu复制文件到另一个文件夹_简单介绍一下电脑中的文件或文件夹的复制、移动及删除的操作方式...

    大家好,我是波仔,今天又来跟各位学电脑基础的朋友们分享知识,让我们一起来学习吧. 复制文件或文件夹 在我们日常操作文件或文件夹的过程中,经常会遇到需要复制一些文件或文件夹什么的,下面我们就一起来分享一 ...

  7. Linux删除文件和文件夹【命令】

    1.删除文件夹:rm -r /opt/hello 将会删除/opt/hello目录以及其下所有文件.文件夹 2.删除文件:rm -f /opt/hello/world.txt 将会强制删除/opt/h ...

  8. svn如何删除服务器上的文件,【SVN】彻底 svn 服务器上的 删除某一个文件或文件夹...

    参考: CSDN1:https://blog.csdn.net/u011729865/article/details/78764523 CSDN2:https://blog.csdn.net/wyyo ...

  9. VB.net 删除文件、文件夹

    '这个应该是你要的.删除文件夹下面的所有内容:包括文件,文件夹.Public Sub DeleteFoldeSubFF(ByVal fpath As String)TryFor Each fd As ...

最新文章

  1. matlab基于dct的图像压缩编码解码_基于FPGA的扩频系统设计(下)
  2. MPU6050姿态融合(转载)
  3. (*长期更新)软考网络工程师学习笔记——数据链路层与网络层的相关计算题
  4. mysql 对表插入多行_MySQL表中怎么一次插入两行或更多行
  5. SharePoint v3:忘掉模拟用户Impersonate,SPSecurity.RunWithElevatedPrivileges来了
  6. linux 命令tf,linux——新手提问(关于文件内容替换)
  7. 华为云专线接入方案介绍
  8. JavaScript中通过点击单选框动态显示和隐藏组件
  9. 中位数(Median)
  10. 高速串行收发器的预加重与均衡
  11. RGB和CMYK配色表
  12. android 跳转京东app,第三方应用跳转到京东app
  13. oracle temporarily delayed,temporarily closed造句
  14. java xmemcached incr_XMemcached的基本使用
  15. 电商平台--Mysql主从搭建(2)
  16. 个人所得税计算函数 Oracle可用
  17. 基于VB的Picture绘图
  18. 毕设论文中第一章的图注出现“图一.1”,转化为“图1.1”的方法
  19. 步进电机基础(2.1)- 定子相数的分类、结构、原理
  20. 全国计算机照片怎么弄,证件照电子版怎么弄-制作证件照其实很简单,用excel就行,2分钟搞定...

热门文章

  1. python创建数据库字数不限制_KindEditor设置字数限制
  2. Axure旋转与移动效果
  3. 如何利用Vue3管理系统实现动态路由和动态侧边菜单栏
  4. sulley里面Pcapy模块安装容易出错地方
  5. HTML5情人节礼物2(女友3D相册)
  6. 四川大学2019计算机考研,四川大学考研全攻略篇(各学院2019年考研详解、报考建议...)...
  7. 关于CFree5.0中设置支持C99模式
  8. P5.js 实现交互式动态绘画
  9. 把服务器sql数据库导出excel文件,将mysql数据库数据以Excel文件的形式导出
  10. hive获取近12个月数据