如何将文件放入回收站而不是删除?

问题描述:

当然编程解决方案...如何将文件放入回收站而不是删除?

+1

[发送文件到回收站]可能的重复(http://*.com/questions/3282418/send-a-file-to-the-recycle-bin) – MicroVirus 2016-06-21 10:56:25

http://www.daveamenta.com/2008-05/c-delete-a-file-to-the-recycle-bin/

从上面:

using Microsoft.VisualBasic; 

string path = @"c:\myfile.txt"; 
FileIO.FileSystem.DeleteDirectory(path, 
    FileIO.UIOption.OnlyErrorDialogs, 
    RecycleOption.SendToRecycleBin); 

您需要深入研究非托管代码。下面是我一直在使用一个静态类:

public static class Recycle 
{ 
    private const int FO_DELETE = 3; 
    private const int FOF_ALLOWUNDO = 0x40; 
    private const int FOF_NOCONFIRMATION = 0x0010; 

    [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; 
    } 

    [DllImport("shell32.dll", CharSet = CharSet.Auto)] 
    static extern int SHFileOperation(ref SHFILEOPSTRUCT FileOp); 

    public static void DeleteFileOperation(string filePath) 
    { 
     SHFILEOPSTRUCT fileop = new SHFILEOPSTRUCT(); 
     fileop.wFunc = FO_DELETE; 
     fileop.pFrom = filePath + '\0' + '\0'; 
     fileop.fFlags = FOF_ALLOWUNDO | FOF_NOCONFIRMATION; 

     SHFileOperation(ref fileop); 
    } 
} 

附录:

  • 啧啧@杰夫在C#代码 “使用Microsoft.VisualBasic程序”。
  • Tsk tsk @ MS将所有好东西放在VisualBasic命名空间中。
+11

我想这是其中之一VB只是比C#更好的区域......此外,它不是仅仅因为它在VB命名空间中而是“不是C#” - 一个对象是一个对象,不要仅仅因为它位于名称空间而不喜欢它的名称就使用它有点荒谬你不觉得吗?... – BenAlabaster 2008-12-22 15:18:19

+9

...如果命名空间是Microsoft.UsefulUtilities你不会对使用它们有所保留,那有什么区别? – BenAlabaster 2008-12-22 15:18:54

我发现最好的方法是使用VB功能FileSystem.DeleteFile

Microsoft.VisualBasic.FileIO.FileSystem.DeleteFile(file.FullName, 
    Microsoft.VisualBasic.FileIO.UIOption.OnlyErrorDialogs, 
    Microsoft.VisualBasic.FileIO.RecycleOption.SendToRecycleBin); 

它需要添加Microsoft.VisualBasic作为参考,但是这是.NET框架的一部分,所以不是一个额外的依赖。

替代解决方案需要P/Invoke到SHFileOperation,以及定义所有各种结构/常量。包括Microsoft.VisualBasic比较整齐。