代码之家  ›  专栏  ›  技术社区  ›  Brian Leahy

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

  •  29
  • Brian Leahy  · 技术社区  · 17 年前

    当然是程序化的解决方案。..

    3 回复  |  直到 12 年前
        1
  •  38
  •   Jeff Atwood    17 年前

    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);
    
        2
  •  16
  •   Ishmaeel    17 年前

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

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

    附录:

    • Tsk-Tsk@Jeff在C#代码中“使用Microsoft.VisualBasic”。
    • 感谢Tsk-Tsk@MS将所有好东西放在VisualBasic命名空间中。
        3
  •  13
  •   Zooba Necrolis    17 年前

    我发现的最好的方法是使用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 ,以及定义所有各种结构/常数。包括…在内 微软。Visual Basic 相比之下,它要整洁得多。