c#删除文件和目录到回收站

之前在c++上遇到过这个问题,折腾许久才解决了,这次在c#上再次遇到这个问题,不过似乎容易了一些,亲测代码如下,两种删除方式都写在代码中了。

直接上完整代码:

using Microsoft.VisualBasic.FileIO;
using System;
using System.IO;
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);
}

public static bool SendToRecycleBin(string path)
{
bool bRet = true;
try
{
if (File.Exists(path))
{
FileSystem.DeleteFile(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
}
else if (Directory.Exists(path))
{
FileSystem.DeleteDirectory(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin);
}
else
{
bRet = false;
}
}
catch (Exception ex)
{
Console.WriteLine($"无法将文件/目录 {path} 移动到回收站: {ex.Message}");
bRet = false;
}

return bRet;
}

static void Main(string[] args)
{
DeleteFileToRecyclebin(@"C:\Users\autumoon\Desktop\test.txt");
SendToRecycleBin(@"C:\Users\autumoon\Desktop\test2.txt");
}

#endregion
}
}

————————————————

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

原文链接:https://blog.csdn.net/autumoonchina/article/details/145144848

版权声明:
作者:SE_Gai
链接:https://www.cnesa.cn/2964.html
来源:CNESA
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
打赏
海报
c#删除文件和目录到回收站
之前在c++上遇到过这个问题,折腾许久才解决了,这次在c#上再次遇到这个问题,不过似乎容易了一些,亲测代码如下,两种删除方式都写在代码中了。 直接上完整代码: using Microsoft.VisualBasic.FileIO; using System; using System.IO; 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); } public static bool SendToRecycleBin(string path) { bool bRet = true; try { if (File.Exists(path)) { FileSystem.DeleteFile(path, UIOption.OnlyErrorDialogs, RecycleOption.SendToRecycleBin); } else if ……
<<上一篇
下一篇>>