C#引用Microsoft.VisualBasic将目录或文件删除到回收站。

  1. using System.Runtime.InteropServices;
  2. private const int FO_DELETE = 0x3;
  3. private const ushort FOF_NOCONFIRMATION = 0x10;
  4. private const ushort FOF_ALLOWUNDO = 0x40;
  5. [DllImport("shell32.dll")]
  6. private static extern int SHFileOperation([In, Out] _SHFILEOPSTRUCT str);
  7. [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
  8. public class _SHFILEOPSTRUCT
  9. {
  10.     public IntPtr hwnd;
  11.     public UInt32 wFunc;
  12.     public string pFrom;
  13.     public string pTo;
  14.     public UInt16 fFlags;
  15.     public Int32 fAnyOperationsAborted;
  16.     public IntPtr hNameMappings;
  17.     public string lpszProgressTitle;
  18. }
  19. public static int DeleteToRecycleBin(string path)
  20. {
  21.     _SHFILEOPSTRUCT pm = new _SHFILEOPSTRUCT();
  22.     pm.wFunc = FO_DELETE;
  23.     pm.pFrom = path + '/0';
  24.     pm.pTo = null;
  25.     pm.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION;
  26.     return SHFileOperation(pm);
  27. private void button1_Click(object sender, EventArgs e)
  28. {
  29.     DeleteToRecycleBin(@"c:/temp/temp.txt");
  30. }
以前在Delphi里写过,关于Windows文件浏览器相关的操作可以调用ShellAPI相关的函数。
所以先找了一个API的方式。

后来在我记忆里有一个Microsoft.VisualBasic的方法,能更方便地实现 SHFileOperation()的调用。
还能显示出确认对话框:

  C#引用Microsoft.VisualBasic将目录或文件删除到回收站。_第1张图片

  1. private void button1_Click(object sender, EventArgs e)
  2. {
  3.     //-----------
  4.     //项目中添加Microsoft.VisualBasic引用
  5.     
  6.     Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(@"d:/temp/temp.txt",
  7.         Microsoft.VisualBasic.FileIO.UIOption.AllDialogs, 
  8.         Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin, 
  9.         Microsoft.VisualBasic.FileIO.UICancelOption.DoNothing);
  10. }
是的,上次一个问题是:VB中的 Format, IIf函数在C#中如何实现,知道这个引用就简单了
  1. Microsoft.VisualBasic.Strings.Format();
  2. Microsoft.VisualBasic.Interaction.IIf();
还有其他相关的方法,比如获取内存使用量
  1. //-----------
  2. //项目中添加Microsoft.VisualBasic引用
  3. //using Microsoft.VisualBasic.Devices;
  4. Computer computer = new Computer();
  5. Console.WriteLine("AvailablePhysicalMemory:{0}M"
  6.     computer.Info.AvailablePhysicalMemory / (1024 * 1024));
  7. Console.WriteLine("AvailableVirtualMemory:{0}M"
  8.     computer.Info.AvailableVirtualMemory / (1024 * 1024));

在.NET环境下,能不用API就不用API。

你可能感兴趣的:(C#引用Microsoft.VisualBasic将目录或文件删除到回收站。)