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 Const
public const int FO_DELETE = 3;
public const int FOF_ALLOWUNDO = 0x40;
public const int FOF_NOCONFIRMATION = 0x10;
#endregion
#region Public Static Method
public 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)
-
using System; -
using System.Collections.Generic; -
using System.Linq; -
using System.Text; -
using System.Runtime.InteropServices; -
namespace ceshiConsole -
{ -
public class Cleaner -
{ -
private const int FO_DELETE = 0x3; -
private const ushort FOF_NOCONFIRMATION = 0x10; -
private const ushort FOF_ALLOWUNDO = 0x40; -
[DllImport("shell32.dll", SetLastError = true, CharSet = CharSet.Unicode)] -
private static extern int SHFileOperation([In, Out] _SHFILEOPSTRUCT str); -
[StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)] -
public class _SHFILEOPSTRUCT -
{ -
public IntPtr hwnd; -
public UInt32 wFunc; -
public string pFrom; -
public string pTo; -
public UInt16 fFlags; -
public Int32 fAnyOperationsAborted; -
public IntPtr hNameMappings; -
public string lpszProgressTitle; -
} -
public static int Delete(string path) -
{ -
_SHFILEOPSTRUCT pm = new _SHFILEOPSTRUCT(); -
pm.wFunc = FO_DELETE; -
pm.pFrom = path + '\0'; -
pm.pTo = null; -
pm.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; -
return SHFileOperation(pm); -
} -
} -
}
以上在ceshiConsole项目中实现。
以上2中方法的主要区别在于,前者使用的是struct SHFILEOPSTRUCT,后者使用的是class _SHFILEOPSTRUCT。与VB中FileIO.FileSystem.DeleteFile的区别在于,CS调用删除时,如果出错(比如文件不存在,etc)时,不报Exception异常,而是通过SHFileOperation的返回值来区别错误(异常)类型的;而VB报异常。
附:
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#中将文件或文件夹删除至回收站的方法,一种使用struct SHFILEOPSTRUCT,另一种使用class _SHFILEOPSTRUCT。文章详细展示了如何调用SHFileOperation函数,并对比了C#与VB在异常处理上的不同。
1249

被折叠的 条评论
为什么被折叠?



