2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > C#实现的文件操作封装类完整实例代码分享

C#实现的文件操作封装类完整实例代码分享

时间:2019-08-09 03:40:10

相关推荐

C#实现的文件操作封装类完整实例代码分享

后端开发|C#.Net教程

C#,文件操作,封装类

后端开发-C#.Net教程最近发现群共享里面有个C# 文件操作封装类,其方法是调用Windows API 来操作的文件的删除、移动、复制、重命名操作。下载下来一试,发现果然不错,特在此记录,以防丢失!

aspx小型网站源码,ubuntu刷苹果手机,a6tomcat安装失败,python 爬虫 抢购,php商业网站模板,seo项目大全lzw

文件操作类代码如下:

锁机源码网址,vscode提交代码工具,ubuntu日志信息,查询tomcat链接数,flask反爬虫,php调用其他文件函数,seo优化制造行业推广报价,全网vip视频解析网站源码二次解析,w3school 模板lzw

本地 洗车 源码,vscode怎么清除最近记录,pyqt ubuntu,tomcat和域名绑定,sqlite short,网页设计如何做联系我们页面,sql创建数据库教程,连接数据库失败可能数据库密码不对或数据库服务器出错,wordpress在线聊天插件,前端 mvc框架,邮箱数据爬虫,php后端框架,外贸seo招聘,springboot如何查找,aspcms 列表分页标签, 视频网站源码下载,jquery实现通用网页打印,购物网站模板下载,angularjs后台模板,货物管理静态页面模板,会议室预定开源管理系统,分类导航程序lzw

using System;using System.Runtime.InteropServices;using System.IO;namespace LxFile{ /// 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, //删除文件,只是用pFromFO_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 【删除文件操作】 ////// 删除的文件名 /// 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 /// 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框 /// 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效 /// 反馈错误消息的字符串 /// 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 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;} } ////// 字符串数组,表示一组文件名 /// 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 /// 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框 /// 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效 /// 反馈错误消息的字符串 /// 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 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 【移动文件操作】 ////// 要移动的文件名 /// 移动到的目的路径 /// 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 /// 指示是否显示进度对话框 /// 指示当文件名重复时,是否自动为新文件加上后缀名 /// 反馈错误消息的字符串 /// 返回移动操作是否成功的标识,成功返回0,失败返回错误代码 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;} } ////// 要移动的文件名数组 /// 移动到的目的路径 /// 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 /// 指示是否显示进度对话框 /// 指示当文件名重复时,是否自动为新文件加上后缀名 /// 反馈错误消息的字符串 /// 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 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 【复制文件操作】 ////// 要复制的文件名 /// 复制到的目的文件名或路径 /// 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 /// 指示是否显示进度对话框 /// 指示当文件名重复时,是否自动为新文件加上后缀名 /// 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 public static int CopyFile(string sourceFileName, string destinationFileName, bool showDialog, bool showProgress, bool autoRename, ref string errorMsg) {try{ string sfName = GetFullName(sourceFileName); string dfName = GetFullName(destinationFileName); return ToMoveOrCopy(wFunc.FO_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);}catch (Exception ex){ errorMsg = ex.Message; return -200;} } ////// 要复制的文件名数组 /// 复制到的目的路径 /// 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 /// 指示是否显示进度对话框 /// 指示当文件名重复时,是否自动为新文件加上后缀名 /// 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 public static int CopyFiles(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_COPY, sfName, dfName, showDialog, showProgress, autoRename, ref errorMsg);}catch (Exception ex){ errorMsg = ex.Message; return -200;} } #endregion 【复制文件操作】 #region 【重命名文件】 ////// 要复制的文件名 /// 复制到的目的文件名或路径 /// 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 /// 返回移动操作是否成功的标识,成功返回0,失败返回错误代码,-200:表示其他异常 [Obsolete("建议使用 Microsoft.VisualBasic.FileSystem.ReName()方法")] public static int ReNameFile(string sourceFileName, string destinationFileName, bool showDialog, ref string errorMsg) {try{ SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT(); lpFileOp.wFunc = wFunc.FO_RENAME; lpFileOp.pFrom = GetFullName(sourceFileName) + "\0\0";//将文件名以结尾字符"\0\0"结束 lpFileOp.pTo = GetFullName(destinationFileName) + "\0\0"; lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI; if (!showDialog)lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; //设定不显示提示对话框 lpFileOp.fAnyOperationsAborted = true; int n = SHFileOperation(ref lpFileOp); if (n == 0)return 0; string tmp = GetErrorString(n); errorMsg = string.Format("{0}({1})", tmp, sourceFileName); return n;}catch (Exception ex){ errorMsg = ex.Message; return -200;} } /////////public static void ReNameFile(string filePath, string newFileName) {try{ string extensName = Path.GetExtension(filePath); string newName = newFileName + extensName; Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(filePath, newName);}catch (Exception ex){ throw ex;} } #endregion 【重命名文件】 ////// 删除的文件名,如果是多个文件,文件名之间以字符串结尾符\隔开 /// 指示是将文件放入回收站还是永久删除,true-放入回收站,false-永久删除 /// 指示是否显示确认对话框,true-显示确认删除对话框,false-不显示确认删除对话框 /// 指示是否显示进度对话框,true-显示,false-不显示。该参数当指定永久删除文件时有效 /// 反馈错误消息的字符串 /// 操作执行结果标识,删除文件成功返回0,否则,返回错误代码 private static int ToDelete(string fileName, bool toRecycle, bool showDialog, bool showProgress, ref string errorMsg) {SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();lpFileOp.wFunc = wFunc.FO_DELETE;lpFileOp.pFrom = fileName + "\0"; //将文件名以结尾字符"\0"结束lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;if (toRecycle) lpFileOp.fFlags |= FILEOP_FLAGS.FOF_ALLOWUNDO; //设定删除到回收站if (!showDialog) lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; //设定不显示提示对话框if (!showProgress) lpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; //设定不显示进度对话框lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp);if (n == 0) return 0;string tmp = GetErrorString(n);//.av 文件正常删除了但也提示 402 错误,不知道为什么。屏蔽之。if ((fileName.ToLower().EndsWith(".av") && n.ToString("X") == "402")) return 0;errorMsg = string.Format("{0}({1})", tmp, fileName);return n; } ////// 操作类型,是移动操作还是复制操作 /// 要移动或复制的文件名,如果是多个文件,文件名之间以字符串结尾符\隔开 /// 移动到的目的位置 /// 指示是否显示确认对话框,true-显示确认对话框,false-不显示确认对话框 /// 指示是否显示进度对话框 /// 指示当文件名重复时,是否自动为新文件加上后缀名 /// 反馈错误消息的字符串 /// 返回移动操作是否成功的标识,成功返回0,失败返回错误代码 private static int ToMoveOrCopy(wFunc flag, string sourceFileName, string destinationFileName,bool showDialog, bool showProgress, bool autoRename, ref string errorMsg) {SHFILEOPSTRUCT lpFileOp = new SHFILEOPSTRUCT();lpFileOp.wFunc = flag;lpFileOp.pFrom = sourceFileName + "\0";//将文件名以结尾字符"\0\0"结束lpFileOp.pTo = destinationFileName + "\0\0";lpFileOp.fFlags = FILEOP_FLAGS.FOF_NOERRORUI;lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMMKDIR; //指定在需要时可以直接创建路径if (!showDialog) lpFileOp.fFlags |= FILEOP_FLAGS.FOF_NOCONFIRMATION; //设定不显示提示对话框if (!showProgress) lpFileOp.fFlags |= FILEOP_FLAGS.FOF_SILENT; //设定不显示进度对话框if (autoRename) lpFileOp.fFlags |= FILEOP_FLAGS.FOF_RENAMEONCOLLISION; //自动为重名文件添加名称后缀lpFileOp.fAnyOperationsAborted = true;int n = SHFileOperation(ref lpFileOp);if (n == 0) return 0;string tmp = GetErrorString(n);errorMsg = string.Format("{0}({1})", tmp, sourceFileName);return n; } ////// 文件名 /// 返回生成文件的完整路径名 private static string GetFullName(string fileName) {FileInfo fi = new FileInfo(fileName);return fi.FullName; } ////// 代码号 /// 返回关于错误代码的文字描述 private static string GetErrorString(int n) {if (n == 0) return string.Empty;switch (n){ case 2:return "系统找不到指定的文件。"; case 7:return "存储控制块被销毁。您是否选择的“取消”操作?"; case 113:return "文件已存在!"; case 115:return "重命名文件操作,原始文件和目标文件必须具有相同的路径名。不能使用相对路径。"; case 117:return "I/O控制错误"; case 123:return "指定了重复的文件名"; case 116:return "The source is a root directory, which cannot be moved or renamed."; case 118:return "Security settings denied access to the source."; case 124:return "The path in the source or destination or both was invalid."; case 65536:return "An unspecified error occurred on the destination."; case 1026:return "在试图移动或拷贝一个不存在的文件."; case 1223:return "操作被取消!"; default:return "未识别的错误代码:" + n;} } }}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。