在C#中如何将文件放入回收站。

原创 2004年07月02日 22:09:00

当我的系统可以提供文件操作的时候,我总是尽可能小心对付每一次删除请求,因为,也许用户有可能会在下一分钟因为这次的误操作而后悔不已。

///SHFILEOPSTRUCT definition 

[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Unicode)]
  public struct SHFILEOPSTRUCT
  {
   public IntPtr hwnd;      // Window handle to the dialog box to display information about the
             // status of the file operation.
   public UInt32 wFunc;     // Value that indicates which operation to perform.
   public IntPtr pFrom;     // Address of a buffer to specify one or more source file names.
             // These names must be fully qualified paths. Standard Microsoft?
             // MS-DOS?wild cards, such as "*", are permitted in the file-name
             // position. Although this member is declared as a null-terminated
             // string, it is used as a buffer to hold multiple file names. Each
             // file name must be terminated by a single NULL character. An 
             // additional NULL character must be appended to the end of the
             // final name to indicate the end of pFrom.
   public IntPtr pTo;      // Address of a buffer to contain the name of the destination file or
             // directory. This parameter must be set to NULL if it is not used.
             // Like pFrom, the pTo member is also a double-null terminated
             // string and is handled in much the same way.
   public UInt16 fFlags;     // Flags that control the file operation.
   public Int32 fAnyOperationsAborted;  // Value that receives TRUE if the user aborted any file operations
             // before they were completed, or FALSE otherwise.
   public IntPtr hNameMappings;   // A handle to a name mapping object containing the old and new
             // names of the renamed files. This member is used only if the
             // fFlags member includes the FOF_WANTMAPPINGHANDLE flag.
   [MarshalAs(UnmanagedType.LPWStr)]
   public String lpszProgressTitle;  // Address of a string to use as the title of a progress dialog box.
             // This member is used only if fFlags includes the
             // FOF_SIMPLEPROGRESS flag.
  }

   ///API declaration, using it you can copies, moves, renames, or deletes a file system object.
  [DllImport("shell32.dll" , CharSet = CharSet.Unicode)]
  public static extern Int32 SHFileOperation(
   ref SHFILEOPSTRUCT lpFileOp);

///implementation

public bool DeleteFiles(string[] files)

{

   SHFILEOPSTRUCT FileOpStruct = new SHFILEOPSTRUCT();
   
   FileOpStruct.hwnd = OwnerWindow;
   FileOpStruct.wFunc = (uint)Operation;

   String multiSource = StringArrayToMultiString(SourceFiles);
   String multiDest = StringArrayToMultiString(DestFiles);
   FileOpStruct.pFrom = Marshal.StringToHGlobalUni(multiSource);
   FileOpStruct.pTo = Marshal.StringToHGlobalUni(multiDest);
   
   FileOpStruct.fFlags = (ushort)OperationFlags;
   FileOpStruct.lpszProgressTitle = ProgressTitle;
   FileOpStruct.fAnyOperationsAborted = 0;
   FileOpStruct.hNameMappings = IntPtr.Zero;

   int RetVal;
   RetVal = ShellApi.SHFileOperation(ref FileOpStruct);

}

 

private String StringArrayToMultiString(String[] stringArray)
  {
   String multiString = "";

   if (stringArray == null)
    return "";

   for (int i=0 ; i<stringArray.Length ; i++)
    multiString += stringArray[i] + '/0';
   
   multiString += '/0';
   
   return multiString;
  }

C#删除文件和文件夹到回收站的代码

来自:http://outofmemory.cn/code-snippet/830/C-delete-file-wenjianjia-come-huishouzhan-code using Syst...
  • ArvinStudy
  • ArvinStudy
  • 2013年02月05日 11:03
  • 1094

VC实现将文件放入回收站

CFile类中的Remove()函数来删除一个文件,但是这样的操作将永久性的删除该文件,不能在必要的时候再恢复该文件,解决这个问题的方法就是把文件送到Windows系统中的回收站里面,而不是简单的永久...
  • youyongyoumou
  • youyongyoumou
  • 2014年04月09日 23:50
  • 906

[小技巧] 将 rm 命令删除的文件放在回收站

linux 的 rm命令非常 有几种方式实现:
  • robertsong2004
  • robertsong2004
  • 2014年08月28日 23:31
  • 1942

oracle删除table不进回收站,清除当前用户的回收站

Oracle 回收站功能,彻底删除表 Oracle 10g 中出现表名:BIN$2cMp4FjwQ2Cw3Lj+BxLYTw==$0最近发现Oracle中出现了这些奇怪的表名,上网查找后发现是ora...
  • mikean
  • mikean
  • 2013年10月20日 12:06
  • 2108

C# 系统应用之清空回收站操作

本文主要讲述的是如何通过C#代码实现清空回收站的资源.主要通过SHEmptyRecycleBin函数实现.主要讲解该函数的具体功能及参数含义,同时通过实例实现清空回收站.希望对大家有所帮助....
  • Eastmount
  • Eastmount
  • 2014年01月17日 20:55
  • 2996

如何修改回收站的名字

在开始菜单中选择"启动",输入regedit按确定打开"注册表编辑器", 依次展开 HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam\...
  • ncode
  • ncode
  • 2012年03月30日 15:32
  • 889

将linux下的rm命令改造成移动文件至回收站

将linux下的rm命令改造成移动文件至回收站 rm是Linux下文件删除的命令,它是Linux下非常强大却又非常危险的一条命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所...
  • a3470194
  • a3470194
  • 2013年11月21日 17:07
  • 5890

怎么找到win10由于删除文件后清空回收站的文件

永久删除文件是很常见的数据恢复故障。在永久删除文件后如何恢复数据就显的尤为重要了,首先我们需要明白,在永久删除文件后不能往要恢复的误删文件所在的分区,存入任何新的文件,否则数据覆盖了就无力回天了。接下...
  • akdien
  • akdien
  • 2017年12月15日 16:29
  • 224

Linux删除文件实现回收站功能

从事过服务器维护的人都知道rm、rm -rf 的厉害,执行起来一点也不马虎,有点六亲不认的感觉。刚开始我也没觉得rm的厉害,经过昨天rm掉我几天的工作量,我才发现rm就是一把双刃剑,幸好我的服务器有...
  • u014057054
  • u014057054
  • 2016年08月05日 10:17
  • 2264

计算机基础知识----课后习题

 一、选择题1.世界上首次提出存储程序计算机体系结构的是      。A)莫奇莱                               B)艾伦·图灵C)乔治·布尔               ...
  • zhouminghong
  • zhouminghong
  • 2008年01月16日 17:38
  • 3458
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:在C#中如何将文件放入回收站。
举报原因:
原因补充:

(最多只允许输入30个字)