C# 删除移动文件(附带弹窗和进度提示)_第1页
C# 删除移动文件(附带弹窗和进度提示)_第2页
C# 删除移动文件(附带弹窗和进度提示)_第3页
C# 删除移动文件(附带弹窗和进度提示)_第4页
C# 删除移动文件(附带弹窗和进度提示)_第5页
已阅读5页,还剩9页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、/* 该类是从最新写的一个FTP软件中抽取出来的,觉得比较有用,所以拿出来供大家分享。* .NET已经封装了很多用于文件操作的类,在System.IO命名空间中,但该命名空间中的* 类在执行文件操作时(如删除、复制)因为没有配套的UI元素,所以只适合后台执行文件操作。* 微软在.NET 2.0中又增加了Microsoft.VisualBasic.FileIO命名空间。空间中的FileSystem类* 可以提供大部分带有UI元素的文件操作,包括删除到回收站的弹窗提示,复制文件进度框等等。* 但是仍不能满足我们所有的要求,比如同时将多个文件移动到回收站的弹窗提示。* * FileOperatePr

2、oxy直接使用Windows API,实现带有弹窗提示的文件操作。各函数功能详见注释*/于北京海淀区东升科技园内。3/9/2012 YJWangusing System;using System.Runtime.InteropServices;using System.IO;namespace FTPComponent/ / 文件操作代理,该类提供类似于Windows的文件操作体验,Designed by YJWang 2/20/2012/ public class FileOperateProxy#region 【内部类型定义】private struct SHFILEOPSTRUCTpub

3、lic IntPtr hwnd; /父窗口句柄 public wFunc wFunc; /要执行的动作 public string pFrom; /源文件路径,可以是多个文件,以结尾符号"0"结束public string pTo; /目标路径,可以是路径或文件名 public FILEOP_FLAGS fFlags; /标志,附加选项 public bool fAnyOperationsAborted; /是否可被中断 public IntPtr hNameMappings; /文件映射名字,可在其它 Shell 函数中使用 public string lpszProgr

4、essTitle; / 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。private enum wFuncFO_MOVE = 0x0001, /移动文件FO_COPY = 0x0002, /复制文件FO_DELETE = 0x0003, /删除文件,只是用pFromFO_RENAME = 0x0004 /文件重命名private enum FILEOP_FLAGSFOF_MULTIDESTFILES = 0x0001, /pTo 指定了多个目标文件,而不是单个目录FOF_CONFIRMMOUSE = 0x0002,FOF_SILENT = 0x0044, / 不显示一个进度

5、对话框FOF_RENAMEONCOLLISION = 0x0008, / 碰到有抵触的名字时,自动分配前缀FOF_NOCONFIRMATION = 0x10, / 不对用户显示提示FOF_WANTMAPPINGHANDLE = 0x0020, / 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放FOF_ALLOWUNDO = 0x40, / 允许撤销FOF_FILESONLY = 0x0080, / 使用 *.* 时, 只对文件操作FOF_SIMPLEPROGRESS = 0x0100, / 简单进度条,意味者不显示文件名。FOF_NOCONFIRM

6、MKDIR = 0x0200, / 建新目录时不需要用户确定FOF_NOERRORUI = 0x0400, / 不显示出错用户界面FOF_NOCOPYSECURITYATTRIBS = 0x0800, / 不复制 NT 文件的安全属性FOF_NORECURSION = 0x1000 / 不递归目录#endregion 【内部类型定义】#region 【DllImport】DllImport("shell32.dll"private static extern int SHFileOperation(ref SHFILEOPSTRUCT lpFileOp;#endregion

7、 【DllImport】#region 【删除文件操作】/ / 删除单个文件。/ / 删除的文件名/ 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效/ 反馈错误消息的字符串/ 操作执行结果标识,删除文件成功返回0,否则,返回错误代码public static int DeleteFile(string fileName, bool toRecycle, bool showDialo

8、g, bool showProgress, ref string errorMsgtrystring fName = GetFullName(fileName;return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;/ / 删除一组文件。/ / 字符串数组,表示一组文件名/ 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除/ 指示是否显示确认对话框,true-显示确认删除

9、对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效/ 反馈错误消息的字符串/ 操作执行结果标识,删除文件成功返回0,否则,返回错误代码public static int DeleteFiles(string fileNames, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsgtrystring fName = ""foreach (string str in fileNamesfName += G

10、etFullName(str + "0" /组件文件组字符串return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;#endregion 【删除文件操作】#region 【移动文件操作】/ / 移动一个文件到指定路径下/ / 要移动的文件名/ 移动到的目的路径/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框/ 指示

11、当文件名重复时,是否自动为新文件加上后缀名/ 反馈错误消息的字符串/ 返回移动操作是否成功的标识,成功返回0,失败返回错误代码public static int MoveFile(string sourceFileName, string destinationPath, bool showDialog,bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = GetFullName(sourceFileName;string dfName = GetFullName(destinationPath;ret

12、urn ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;/ / 移动一组文件到指定的路径下/ / 要移动的文件名数组/ 移动到的目的路径/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框/ 指示当文件名重复时,是否自动为新文件加上后缀名/ 反馈错误消息的字符串/ 返回移动操作是否成功的

13、标识,成功返回0,失败返回错误代码,-200:表示其他异常public static int MoveFiles(string sourceFileNames, string destinationPath, bool showDialog,bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = ""foreach (string str in sourceFileNamessfName += GetFullName(str + "0" /组件文件组字符串strin

14、g dfName = GetFullName(destinationPath;return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;#endregion 【移动文件操作】#region 【复制文件操作】/ / 复制一个文件到指定的文件名或路径/ / 要复制的文件名/ 复制到的目的文件名或路径/ 指示是否显示确认对话框,true-显示确认删除对

15、话框,false-不显示确认删除对话框/ 指示是否显示进度对话框/ 指示当文件名重复时,是否自动为新文件加上后缀名/ 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常public static int CopyFile(string sourceFileName, string destinationFileName, bool showDialog, bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = GetFullName(sourceFileName;string

16、 dfName = GetFullName(destinationFileName;return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;/ / 复制一组文件到指定的路径/ / 要复制的文件名数组/ 复制到的目的路径/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框/ 指示当文

17、件名重复时,是否自动为新文件加上后缀名/ 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常public static int CopyFiles(string sourceFileNames, string destinationPath, bool showDialog, bool showProgress,bool autoRename, ref string errorMsgtrystring sfName = ""foreach (string str in sourceFileNamessfName += GetFullName(s

18、tr + "0" /组件文件组字符串string dfName = GetFullName(destinationPath;return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg;catch (Exception exerrorMsg = ex.Message;return -200;#endregion 【复制文件操作】#region 【重命名文件】/ / 重命名一个文件为新名称,建议您使用更方便的Microsoft.Visu

19、alBasic.FileSystem.ReName(;替换该方法/ / 要复制的文件名/ 复制到的目的文件名或路径/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常Obsolete("建议使用 Microsoft.VisualBasic.FileSystem.ReName(方法"public static int ReNameFile(string sourceFileName, string destinationFileName, bool sho

20、wDialog, ref string errorMsgtrySHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(;lpFileOp.wFunc = wFunc.FO_RENAME;lpFileOp.pFrom = GetFullName(sourceFileName + "00" /将文件名以结尾字符"00"结束lpFileOp.pTo = GetFullName(destinationFileName + "00"lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERR

21、ORUI;if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /设定不显示提示对话框lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp = GetErrorString(n;errorMsg = string.Format(0(1, tmp, sourceFileName;return n;catch (Exception exerrorMsg = ex.Me

22、ssage;return -200;#endregion 【重命名文件】/ / 删除单个或多个文件。/ / 删除的文件名,如果是多个文件,文件名之间以字符串结尾符'0'隔开/ 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效/ 反馈错误消息的字符串/ 操作执行结果标识,删除文件成功返回0,否则,返回错误代码private static int ToDelete(str

23、ing fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsgSHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(;lpFileOp.wFunc = wFunc.FO_DELETE;lpFileOp.pFrom = fileName + "0" /将文件名以结尾字符"0"结束lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;if (toRecyclelpFileOp.fF

24、lags |= FILEOP_FLAGS.FOF_ALLOWUNDO; /设定删除到回收站if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /设定不显示提示对话框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /设定不显示进度对话框lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp =

25、 GetErrorString(n;/.av 文件正常删除了但也提示 402 错误,不知道为什么。屏蔽之。if (fileName.ToLower(.EndsWith(".av" && n.ToString("X" = "402"return 0;errorMsg = string.Format(0(1, tmp, fileName;return n;/ / 移动或复制一个或多个文件到指定路径下/ / 操作类型,是移动操作还是复制操作/ 要移动或复制的文件名,如果是多个文件,文件名之间以字符串结尾符'0'

26、;隔开/ 移动到的目的位置/ 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框/ 指示是否显示进度对话框/ 指示当文件名重复时,是否自动为新文件加上后缀名/ 反馈错误消息的字符串/ 返回移动操作是否成功的标识,成功返回0,失败返回错误代码private static int ToMoveOrCopy(wFunc flag, string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string err

27、orMsgSHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(;lpFileOp.wFunc = flag;lpFileOp.pFrom = sourceFileName + "0" /将文件名以结尾字符"00"结束lpFileOp.pTo = destinationFileName + "00"lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMMKDIR; /指定在需

28、要时可以直接创建路径if (!showDialoglpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; /设定不显示提示对话框if (!showProgresslpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; /设定不显示进度对话框if (autoRenamelpFileOp.fFlags |= FILEOP_FLAGS.FOF_RENAMEONCOLLISION; /自动为重名文件添加名称后缀lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp;if (n = 0return 0;string tmp = GetErrorString(n;errorMsg = string.Format(0(1, tmp, sourceFileName;return n;/ / 获取一个文件的全名

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论