Rising_Sun 通过本文主要向大家介绍了马桶c的个人空间,c语言,欲情 c max,维生素c,crh2c等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com
本文实例讲述了C#实现的文件操作封装类。分享给大家供大家参考,具体如下:
最近发现群共享里面有个C# 文件操作封装类,其方法是调用Windows API 来操作的文件的删除、移动、复制、重命名操作。下载下来一试,发现果然不错,特在此记录,以防丢失!
文件操作类代码如下:
using System; using System.Runtime.InteropServices; using System.IO; namespace LxFile { /// <summary> /// 文件操作代理,该类提供类似于Windows的文件操作体验 /// </summary> public class FileOperateProxy { #region 【内部类型定义】 private struct SHFILEOPSTRUCT { public 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 lpszProgressTitle; // 只在 FOF_SIMPLEPROGRESS 时,指定对话框的标题。 } private enum wFunc { FO_MOVE = 0x0001, //移动文件 FO_COPY = 0x0002, //复制文件 FO_DELETE = 0x0003, //删除文件,只是用pFrom FO_RENAME = 0x0004 //文件重命名 } private enum FILEOP_FLAGS { FOF_MULTIDESTFILES = 0x0001, //pTo 指定了多个目标文件,而不是单个目录 FOF_CONFIRMMOUSE = 0x0002, FOF_SILENT = 0x0044, // 不显示一个进度对话框 FOF_RENAMEONCOLLISION = 0x0008, // 碰到有抵触的名字时,自动分配前缀 FOF_NOCONFIRMATION = 0x10, // 不对用户显示提示 FOF_WANTMAPPINGHANDLE = 0x0020, // 填充 hNameMappings 字段,必须使用 SHFreeNameMappings 释放 FOF_ALLOWUNDO = 0x40, // 允许撤销 FOF_FILESONLY = 0x0080, // 使用 *.* 时, 只对文件操作 FOF_SIMPLEPROGRESS = 0x0100, // 简单进度条,意味者不显示文件名。 FOF_NOCONFIRMMKDIR = 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 【DllImport】 #region 【删除文件操作】 /// <summary> /// 删除单个文件。 /// </summary> /// <param name="fileName">删除的文件名</param> /// <param name="toRecycle">指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除</param> /// <param name="showDialog">指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框</param> /// <param name="showProgress">指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效</param> /// <param name="errorMsg">反馈错误消息的字符串</param> /// <returns>操作执行结果标识,删除文件成功返回0,否则,返回错误代码</returns> public static int DeleteFile(string fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg) { try { string fName = GetFullName(fileName); return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg); } catch (Exception ex) { errorMsg = ex.Message; return -200; } } /// <summary> /// 删除一组文件。 /// </summary> /// <param name="fileNames">字符串数组,表示一组文件名</param> /// <param name="toRecycle">指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除</param> /// <param name="showDialog">指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框</param> /// <param name="showProgress">指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效</param> /// <param name="errorMsg">反馈错误消息的字符串</param> /// <returns>操作执行结果标识,删除文件成功返回0,否则,返回错误代码</returns> public static int DeleteFiles(string[] fileNames, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg) { try { string fName = ""; foreach (string str in fileNames) { fName += GetFullName(str) + "\0"; //组件文件组字符串 } return ToDelete(fName, toRecycle, showDialog, showProgress, ref errorMsg); } catch (Exception ex) { errorMsg = ex.Message; return -200; } } #endregion 【删除文件操作】 #region 【移动文件操作】 /// <summary> /// 移动一个文件到指定路径下 /// </summary> /// <param name="sourceFileName">要移动的文件名</param> /// <param name="destinationPath">移动到的目的路径</param> /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param> /// <param name="showProgress">指示是否显示进度对话框</param> /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param> /// <param name="errorMsg">反馈错误消息的字符串</param> /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码</returns> public static int MoveFile(string sourceFileName, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg) { try { string sfName = GetFullName(sourceFileName); string dfName = GetFullName(destinationPath); return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg); } catch (Exception ex) { errorMsg = ex.Message; return -200; } } /// <summary> /// 移动一组文件到指定的路径下 /// </summary> /// <param name="sourceFileNames">要移动的文件名数组</param> /// <param name="destinationPath">移动到的目的路径</param> /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param> /// <param name="showProgress">指示是否显示进度对话框</param> /// <param name="autoRename">指示当文件名重复时,是否自动为新文件加上后缀名</param> /// <param name="errorMsg">反馈错误消息的字符串</param> /// <returns>返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常</returns> public static int MoveFiles(string[] sourceFileNames, string destinationPath, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg) { try { string sfName = ""; foreach (string str in sourceFileNames) { sfName += GetFullName(str) + "\0"; //组件文件组字符串 } string dfName = GetFullName(destinationPath); return ToMoveOrCopy(wFunc.FO_MOVE, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg); } catch (Exception ex) { errorMsg = ex.Message; return -200; } } #endregion 【移动文件操作】 #region 【复制文件操作】 /// <summary> /// 复制一个文件到指定的文件名或路径 /// </summary> /// <param name="sourceFileName">要复制的文件名</param> /// <param name="destinationFileName">复制到的目的文件名或路径</param> /// <param name="showDialog">指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框</param> /// <param name="showProgress">指示是否显示进度对话框</param> /// <param name="autoRename