admin管理员组文章数量:1587923
c# 如何将文件删除到回收站(文件操作)
长空玮
很多一部分网上回答都是调用System.VisualBasic的,这部分我就不粘了,毕竟不是使用VB的。以下2种方法基本相同,主要是鉴于构造不同,决定都附上。
1.(http://www.dotblogs.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/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报异常。
附:
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#删除文件和文件夹到回收站 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1728022074a1142374.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论