辅助类
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(13)--- 各种常用的辅助类2
俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。
本篇的公用类库的介绍主题是程序开发中常用到的一些辅助类,在帮助文档中归类到其他目录下面,本篇主要介绍有注册表的操作、反射操作、正则表达式操作、Zip压缩操作、AD操作、字符串Unicode转换操作等常见但有些凌乱的类库。
本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公用类库的接口方法以及详细使用操作,力求给自己继续优化,积攒更丰富的公用类库资源,加深了解的同时,也给大家展现公用类库好的方面。
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(12)--- 网络相关操作辅助类
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(11)---各种线程相关操作类
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(10)---各种线程同步的集合类
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(9)----各种常用辅助类
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(8)----非对称加密、BASE64加密、MD5等常用加密处理
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(7)-----声音播放、硬件信息、键盘模拟及钩子、鼠标模拟及钩子等设备相关
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(6)----全屏截图、图标获取、图片打印、页面预览截屏、图片复杂操作等
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(5)----热键、多线程、窗体动画冻结等窗体操作
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(4)----CSV、Excel、INI文件、独立存储等文件相关
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(3)----数据库相关操作
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(2)----常用操作
厚积薄发,丰富的公用类库积累,助你高效进行系统开发(1)----开篇总结
1、 注册表操作辅助类RegistryHelper,通过默认指定注册表的前缀路径,减少调用复杂性。
1)辅助类提供的方法接口如下所示:
/// <summary> /// 获取注册表项的值。如果该键不存在,则返回空字符串。 /// </summary> /// <param name="key"> 注册表键 </param> /// <returns> 指定键返回的值 </returns> public static string GetValue( string key) /// <summary> /// 获取注册表项的值。如果该键不存在,则返回空字符串。 /// </summary> /// <param name="softwareKey"> 注册表键的前缀路径 </param> /// <param name="key"> 注册表键 </param> /// <returns> 指定键返回的值 </returns> public static string GetValue( string softwareKey, string key) /// <summary> /// 获取注册表项的值。如果该键不存在,则返回空字符串。 /// </summary> /// <param name="softwareKey"> 注册表键的前缀路径 </param> /// <param name="key"> 注册表键 </param> /// <param name="rootRegistry"> 开始的根节点(Registry.CurrentUser或者Registry.LocalMachine等) </param> /// <returns> 指定键返回的值 </returns> public static string GetValue( string softwareKey, string key, RegistryKey rootRegistry) /// <summary> /// 保存键值到注册表 /// </summary> /// <param name="key"> 注册表键 </param> /// <param name="value"> 键的值内容 </param> /// <returns> 如果保存成功返回true,否则为false </returns> public static bool SaveValue( string key, string value) /// <summary> /// 保存键值到注册表 /// </summary> /// <param name="softwareKey"> 注册表键的前缀路径 </param> /// <param name="key"> 注册表键 </param> /// <param name="value"> 键的值内容 </param> /// <returns> 如果保存成功返回true,否则为false </returns> public static bool SaveValue( string softwareKey, string key, string value) /// <summary> /// 保存键值到注册表 /// </summary> /// <param name="softwareKey"> 注册表键的前缀路径 </param> /// <param name="key"> 注册表键 </param> /// <param name="value"> 键的值内容 </param> /// <param name="rootRegistry"> 开始的根节点(Registry.CurrentUser或者Registry.LocalMachine等) </param> /// <returns> 如果保存成功返回true,否则为false </returns> public static bool SaveValue( string softwareKey, string key, string value, RegistryKey rootRegistry) #endregion #region 自动启动程序设置 /// <summary> /// 检查是否随系统启动 /// </summary> /// <returns></returns> public static bool CheckStartWithWindows() /// <summary> /// 设置随系统启动 /// </summary> /// <param name="startWin"></param> public static void SetStartWithWindows( bool startWin) #endregion
2)辅助类的使用例子代码如下所示
private void btnRegistryHelper_Click( object sender, EventArgs e) { string result = string .Empty; result += " 使用RegistryHelper注册表访问辅助类: " + " \r\n " ; string softwareKey = @" Software\DeepLand\OrderWater " ; bool sucess = RegistryHelper.SaveValue(softwareKey, " Test " , DateTime.Now.ToString()); if (sucess) { result += RegistryHelper.GetValue(softwareKey, " Test " ) + " \r\n " ; } RegistryHelper.SaveValue(softwareKey, " Test " , " 测试内容 " , Microsoft.Win32.Registry.LocalMachine); result += RegistryHelper.GetValue(softwareKey, " Test " , Microsoft.Win32.Registry.LocalMachine); MessageUtil.ShowTips(result); }
演示代码效果如下所示。
2、 反射操作辅助类ReflectionUtil,如获取或设置字段、属性的值等反射信息。
本辅助类主要是用来方便实现反射操作辅助类,如获取或设置字段、属性的值等反射信息。 在通用的赋值操作(属性或者字段)、执行方法或者需要获取特定对象属性的时候,就需要大量用到反射操作。
1)辅助类提供的方法接口如下所示:
#region 属性字段设置 /// <summary> /// 绑定标识 /// </summary> public static BindingFlags bf = BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static; /// <summary> /// 执行方法 /// </summary> /// <param name="obj"> 对象实例 </param> /// <param name="methodName"> 方法名称 </param> /// <param name="args"> 参数 </param> /// <returns></returns> public static object InvokeMethod( object obj, string methodName, object [] args) /// <summary> /// 设置对象实例的字段值 /// </summary> /// <param name="obj"> 对象实例 </param> /// <param name="name"> 字段名称 </param> /// <param name="value"> 字段值 </param> public static void SetField( object obj, string name, object value) /// <summary> /// 获取对象实例的字段值 /// </summary> /// <param name="obj"> 对象实例 </param> /// <param name="name"> 字段名称 </param> /// <returns></returns> public static object GetField( object obj, string name) /// <summary> /// 获取对象实例的字段集合 /// </summary> /// <param name="obj"> 对象实例 </param> /// <returns></returns> public static FieldInfo[] GetFields( object obj) /// <summary> /// 设置对象实例的属性值 /// </summary> /// <param name="obj"> 对象实例 </param> /// <param name="name"> 属性名称 </param> /// <param name="value"> 属性值 </param> public static void SetProperty( object obj, string name, object value) /// <summary> /// 获取对象实例的属性值 /// </summary> /// <param name="obj"> 对象实例 </param> /// <param name="name"> 属性名称 </param> /// <returns></returns> public static object GetProperty( object obj, string name) /// <summary> /// 获取对象实例的属性列表 /// </summary> /// <param name="obj"> 对象实例 </param> /// <returns></returns> public static PropertyInfo[] GetProperties( object obj) /// <summary> /// 把对象的属性和值,输出一个键值的字符串,如A=1&B=test /// </summary> /// <param name="obj"> 实体对象 </param> /// <param name="includeEmptyProperties"> 是否包含空白属性的键值 </param> /// <returns></returns> public static string ToNameValuePairs( object obj, bool includeEmptyProperties = true ) #endregion #region 获取Description /// <summary> /// 获取枚举字段的Description属性值 /// </summary> /// <param name="value"> The value. </param> /// <returns> return description or value.ToString() </returns> public static string GetDescription(Enum value) /// <summary> /// Get The Enum Field Description using Description Attribute and /// objects to format the Description. /// </summary> /// <param name="value"> Enum For Which description is required. </param> /// <param name="args"> An Object array containing zero or more objects to format. </param> /// <returns> return null if DescriptionAttribute is not found or return type description </returns> public static string GetDescription(Enum value, params object [] args) /// <summary> /// 获取字段的Description属性值 /// </summary> /// <param name="member"> Specified Member for which Info is Required </param> /// <returns> return null if DescriptionAttribute is not found or return type description </returns> public static string GetDescription(MemberInfo member) /// <summary> /// Get The Type Description using Description Attribute and /// objects to format the Description. /// </summary> /// <param name="member"> Specified Member for which Info is Required </param> /// <param name="args"> An Object array containing zero or more objects to format. </param> /// <returns> return <see cref="String.Empty"/> if DescriptionAttribute is /// not found or return type description </returns> public static string GetDescription(MemberInfo member, params object [] args) #endregion #region 获取Attribute信息 /// <summary> /// 获取指定对象实例的attributes内容 /// </summary> /// <param name="attributeType"> The attribute Type for which the custom attributes are to be returned. </param> /// <param name="assembly"> the assembly in which the specified attribute is defined </param> /// <returns> Attribute as Object or null if not found. </returns> public static object GetAttribute(Type attributeType, Assembly assembly) /// <summary> /// 获取指定对象实例的attributes内容 /// </summary> /// <param name="attributeType"> The attribute Type for which the custom attributes are to be returned. </param> /// <param name="type"> the type on which the specified attribute is defined </param> /// <returns> Attribute as Object or null if not found. </returns> public static object GetAttribute(Type attributeType, MemberInfo type) /// <summary> /// Gets the specified object attributes for type as specified by type with option to serach parent /// </summary> /// <param name="attributeType"> The attribute Type for which the custom attributes are to be returned. </param> /// <param name="type"> the type on which the specified attribute is defined </param> /// <param name="searchParent"> if set to <see langword="true"/> [search parent]. </param> /// <returns> /// Attribute as Object or null if not found. /// </returns> public static object GetAttribute(Type attributeType, MemberInfo type, bool searchParent) /// <summary> /// Gets the collection of all specified object attributes for type as specified by type /// </summary> /// <param name="attributeType"> The attribute Type for which the custom attributes are to be returned. </param> /// <param name="type"> the type on which the specified attribute is defined </param> /// <returns> Attribute as Object or null if not found. </returns> public static object [] GetAttributes(Type attributeType, MemberInfo type) /// <summary> /// Gets the collection of all specified object attributes for type as specified by type with option to serach parent /// </summary> /// <param name="attributeType"> The attribute Type for which the custom attributes are to be returned. </param> /// <param name="type"> the type on which the specified attribute is defined </param> /// <param name="searchParent"> The attribute Type for which the custom attribute is to be returned. </param> /// <returns> /// Attribute as Object or null if not found. /// </returns> public static object [] GetAttributes(Type attributeType, MemberInfo type, bool searchParent) #endregion #region 资源获取 /// <summary> /// 根据资源名称获取图片资源流 /// </summary> /// <param name="ResourceName"></param> /// <returns></returns> public static Stream GetImageResource( string ResourceName) /// <summary> /// 获取程序集资源的位图资源 /// </summary> /// <param name="assemblyType"> 程序集中的某一对象类型 </param> /// <param name="resourceHolder"> 资源的根名称。例如,名为“MyResource.en-US.resources”的资源文件的根名称为“MyResource”。 </param> /// <param name="imageName"> 资源项名称 </param> public static Bitmap LoadBitmap(Type assemblyType, string resourceHolder, string imageName) /// <summary> /// 获取程序集资源的文本资源 /// </summary> /// <param name="assemblyType"> 程序集中的某一对象类型 </param> /// <param name="resName"> 资源项名称 </param> /// <param name="resourceHolder"> 资源的根名称。例如,名为“MyResource.en-US.resources”的资源文件的根名称为“MyResource”。 </param> public static string GetStringRes(Type assemblyType, string resName, string resourceHolder) /// <summary> /// 获取程序集嵌入资源的文本形式 /// </summary> /// <param name="assemblyType"> 程序集中的某一对象类型 </param> /// <param name="charset"> 字符集编码 </param> /// <param name="ResName"> 嵌入资源相对路径 </param> /// <returns> 如没找到该资源则返回空字符 </returns> public static string GetManifestString(Type assemblyType, string charset, string ResName) #endregion #region 创建对应实例 /// <summary> /// 创建对应实例 /// </summary> /// <param name="type"> 类型 </param> /// <returns> 对应实例 </returns> public static object CreateInstance( string type) /// <summary> /// 创建对应实例 /// </summary> /// <param name="type"> 类型 </param> /// <returns> 对应实例 </returns> public static object CreateInstance(Type type) #endregion
2)辅助类的使用例子代码如下所示,例子是Socket框架里面用来反序列化对象的操作,通过反射把字符串的值赋值到对象里面。
/// <summary> /// 转换Socket接收到的信息为对象信息 /// </summary> /// <param name="data"> Socket接收到的信息 </param> public BaseEntity( string data) { string [] dataArray = NetStringUtil.UnPack(data); if (dataArray != null && dataArray.Length > 0 ) { int i = 0 ; FieldInfo[] fieldArray = ReflectionUtil.GetFields( this ); if (fieldArray == null || dataArray.Length != fieldArray.Length) { throw new ArgumentException( " 收到的信息和字段信息不一致 " ); } if (fieldArray != null ) { foreach (FieldInfo info in fieldArray) { string strValue = dataArray[i++ ]; try { if (! string .IsNullOrEmpty(strValue)) { ReflectionUtil.SetField( this , info.Name, strValue); } } catch (Exception ex) { Communication.Model.Log.WriteError( string .Format( " 转换数据发生错误:{0}【{1}】 " , ex.Message, data)); break ; } } } } }
例如两个对象的属性基本相同,可以进行对象的拷贝赋值。
#region 表结构一样,复制相关的内容 PilotInfo pilotInfo = BLLFactory<Pilot> .Instance.FindByID(txtPilot.PilotID); if (pilotInfo != null ) { PropertyInfo[] outPropertyArray = ReflectionUtil.GetProperties(info); PropertyInfo[] pilotPropArray = ReflectionUtil.GetProperties(pilotInfo); if (pilotPropArray != null && outPropertyArray != null ) { foreach (PropertyInfo propInfo in pilotPropArray) { try { object value = ReflectionUtil.GetProperty(pilotInfo, propInfo.Name); foreach (PropertyInfo outInfo in outPropertyArray) { if (outInfo.Name == propInfo.Name) { ReflectionUtil.SetProperty(info, propInfo.Name, value); } } } catch (Exception ex) { } } } } #endregion
3、程序集反射创建对象实例辅助类 Reflect
本辅助类主要是用来方便实现程序集反射创建对象实例的操作。 该程序集反射春节对象实例的操作,在我的WInform开发框架中用于对象的创建操作。
1)辅助类提供的方法接口如下所示:
/// <summary> /// 程序集反射创建对象实例辅助类 /// </summary> /// <typeparam name="T"> 对象类型 </typeparam> public class Reflect<T> where T : class { /// <summary> /// 缓存的hash表集合 /// </summary> public static Hashtable ObjCache /// <summary> /// 根据参数创建对象实例 /// </summary> /// <param name="sName"> 对象全局名称 </param> /// <param name="sFilePath"> 文件路径 </param> /// <returns></returns> public static T Create( string sName, string sFilePath) /// <summary> /// 根据参数创建对象实例 /// </summary> /// <param name="sName"> 对象全局名称 </param> /// <param name="sFilePath"> 文件路径 </param> /// <param name="bCache"> 缓存集合 </param> /// <returns></returns> public static T Create( string sName, string sFilePath, bool bCache) /// <summary> /// 创建程序集对象 /// </summary> /// <param name="sFilePath"> 文件路径 </param> /// <returns></returns> public static Assembly CreateAssembly( string sFilePath) }
2)辅助类的使用例子代码如下所示(摘自我的Winform开发框架里面的对象反射操作)。
在下面的例子中,通过传入的类型T,在程序集中构造制定类型的对象,并放入到缓存当中。
public class BLLFactory<T> where T : class { private static Hashtable objCache = new Hashtable(); private static object syncRoot = new Object(); public static T Instance { get { string CacheKey = typeof (T).FullName; T bll = (T)objCache[CacheKey]; // 从缓存读取 if (bll == null ) { lock (syncRoot) { if (bll == null ) { bll = Reflect<T>.Create( typeof (T).FullName, " WHC.WareHouseMis " ); // 反射创建,并缓存 // bll = Reflect<T>.Create(typeof(T).FullName, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); // 反射创建,并缓存 objCache.Add( typeof (T).FullName, bll); } } } return bll; } } }
4、 正则表达式辅助类 CRegex
本辅助类主要是用来方便实现对正则表达式的封装使用,通过利用该类库,可以简化C#对正则表达式的操作,但不能替代掌握正则表达式的知识。
正则表达式可以通过The Reguator等正则表达式调试工具来验证编写的表达式,基本的操作是匹配,替换,分割等,调试工具界面如下:
1)软件包含下面基础通用的操作正则表达式方法的定义,以及一些封装好的正则表达式操作,如获取HTML标题、Body等内容。
/// <summary> /// 内容是否匹配指定的表达式 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <returns></returns> public static bool IsMatch( string sInput, string sRegex) /// <summary> /// 多个匹配内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="iGroupIndex"> 第几个分组, 从1开始, 0代表不分组 </param> public static List< string > GetList( string sInput, string sRegex, int iGroupIndex) /// <summary> /// 多个匹配内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="sGroupName"> 分组名, ""代表不分组 </param> public static List< string > GetList( string sInput, string sRegex, string sGroupName) /// <summary> /// 单个匹配内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="iGroupIndex"> 分组序号, 从1开始, 0不分组 </param> public static string GetText( string sInput, string sRegex, int iGroupIndex) /// <summary> /// 单个匹配内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="sGroupName"> 分组名, ""代表不分组 </param> public static string GetText( string sInput, string sRegex, string sGroupName) /// <summary> /// 替换指定内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="sReplace"> 替换值 </param> /// <param name="iGroupIndex"> 分组序号, 0代表不分组 </param> public static string Replace( string sInput, string sRegex, string sReplace, int iGroupIndex) /// <summary> /// 替换指定内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="sReplace"> 替换值 </param> /// <param name="sGroupName"> 分组名, "" 代表不分组 </param> public static string Replace( string sInput, string sRegex, string sReplace, string sGroupName) /// <summary> /// 分割指定内容 /// </summary> /// <param name="sInput"> 输入内容 </param> /// <param name="sRegex"> 表达式字符串 </param> /// <param name="iStrLen"> 最小保留字符串长度 </param> public static List< string > Split( string sInput, string sRegex, int iStrLen)
5、 压缩文本、字节或者文件的压缩辅助类GZipUtil。
本辅助类主要是用来方便实现压缩文本、字节或者文件的压缩操作。本辅助类使用.NET内置的类库实现压缩操作。
1)辅助类提供的方法接口如下所示:
/// <summary> /// 压缩字符串 /// </summary> /// <param name="text"> 待压缩的文本 </param> /// <returns> 压缩后的文本内容 </returns> public static string Compress( string text) /// <summary> /// 解压字符串 /// </summary> /// <param name="compressedText"> 待解压缩的文本内容 </param> /// <returns> 解压后的原始文本内容 </returns> public static string Decompress( string compressedText) /// <summary> /// 压缩流对象 /// </summary> /// <typeparam name="T"> 对象类型 </typeparam> /// <param name="stream"> 流数据 </param> /// <param name="mode"> 压缩类型 </param> /// <returns></returns> public static T GZip<T>(Stream stream, CompressionMode mode) where T : Stream /// <summary> /// 压缩字节 /// </summary> /// <param name="bytData"> 待压缩字节 </param> /// <returns> 压缩后的字节数组 </returns> public static byte [] Compress( byte [] bytData) /// <summary> /// 解压字节 /// </summary> /// <param name="bytData"> 待解压缩字节 </param> /// <returns> 解压后的原始字节内容 </returns> public static byte [] Decompress( byte [] bytData) /// <summary> /// 压缩Object对象到字节数组 /// </summary> /// <param name="obj"> 待压缩对象 </param> /// <returns> 压缩后的字节数组 </returns> public static byte [] ObjectToGZip( object obj) /// <summary> /// 从压缩的字节数组转换到Object对象 /// </summary> /// <param name="byteArray"> 待解压缩的字节数据 </param> /// <returns> 对象 </returns> public static object GZipToObject( byte [] byteArray) /// <summary> /// 压缩文件 /// </summary> /// <param name="lpSourceFolder"> 包括在zip文件中的文件夹路径,所有文件,包括子文件夹中的文件将包括在内。 </param> /// <param name="lpDestFolder"> 写入到Zip文件的目标文件夹 </param> /// <param name="zipFileName"> zip文件名称 </param> public static GZipResult Compress( string lpSourceFolder, string lpDestFolder, string zipFileName) /// <summary> /// 压缩文件 /// </summary> /// <param name="lpSourceFolder"> 包括在zip文件中的源文件夹路径 </param> /// <param name="searchPattern"> 搜索模式 (例如 "*.*" or "*.txt" or "*.gif") 以标识那些文件将被包含到Zip文件里面 </param> /// <param name="searchOption"> 指定是搜索当前目录,还是搜索当前目录及其所有子目录 </param> /// <param name="lpDestFolder"> 写入zip目标文件夹的路径 </param> /// <param name="zipFileName"> Zip文件名 </param> /// <param name="deleteTempFile"> 布尔值,如果为true则删除中间临时文件,false则在lpDestFolder保留临时文件(调试用) </param> public static GZipResult Compress( string lpSourceFolder, string searchPattern, SearchOption searchOption, string lpDestFolder, string zipFileName, bool deleteTempFile) /// <summary> /// 压缩文件 /// </summary> /// <param name="files"> 在zip文件中包含的FileInfo对象数组 </param> /// <param name="folders"> 文件夹字符串数组 </param> /// <param name="lpBaseFolder"> /// 基础文件夹,在创建的zip文件中存储的文件的相对路径。例如, 如果lpBaseFolder 是 'C:\zipTest\Files\', /// 当存在一个文件 'C:\zipTest\Files\folder1\sample.txt' 在数组'files'里面, 则 sample.txt 的相对路径是 'folder1/sample.txt' /// </param> /// <param name="lpDestFolder"> 写入Zip文件的文件夹 </param> /// <param name="zipFileName"> Zip文件名 </param> public static GZipResult Compress(FileInfo[] files, string [] folders, string lpBaseFolder, string lpDestFolder, string zipFileName) /// <summary> /// 压缩文件 /// </summary> /// <param name="files"> 在zip文件中包含的FileInfo对象数组 </param> /// <param name="lpBaseFolder"> /// 基础文件夹,在创建的zip文件中存储的文件的相对路径。例如, 如果lpBaseFolder 是 'C:\zipTest\Files\', /// 当存在一个文件 'C:\zipTest\Files\folder1\sample.txt' 在数组'files'里面, 则 sample.txt 的相对路径是 'folder1/sample.txt' /// </param> /// <param name="lpDestFolder"> 写入Zip文件的文件夹 </param> /// <param name="zipFileName"> Zip文件名 </param> public static GZipResult Compress(FileInfo[] files, string lpBaseFolder, string lpDestFolder, string zipFileName) /// <summary> /// 压缩文件 /// </summary> /// <param name="files"> 在zip文件中包含的FileInfo对象数组 </param> /// <param name="lpBaseFolder"> /// 基础文件夹,在创建的zip文件中存储的文件的相对路径。例如, 如果lpBaseFolder 是 'C:\zipTest\Files\', /// 当存在一个文件 'C:\zipTest\Files\folder1\sample.txt' 在数组'files'里面, 则 sample.txt 的相对路径是 'folder1/sample.txt' /// </param> /// <param name="lpDestFolder"> 写入Zip文件的文件夹 </param> /// <param name="zipFileName"> Zip文件名 </param> /// <param name="deleteTempFile"> 布尔值,如果为true则删除中间临时文件,false则在lpDestFolder保留临时文件(调试用) </param> public static GZipResult Compress(FileInfo[] files, string lpBaseFolder, string lpDestFolder, string zipFileName, bool deleteTempFile) /// <summary> /// 解压文件 /// </summary> /// <param name="lpSourceFolder"> zip文件的源目录 </param> /// <param name="lpDestFolder"> 解压到的目录 </param> /// <param name="zipFileName"> Zip文件名 </param> /// <returns></returns> public static GZipResult Decompress( string lpSourceFolder, string lpDestFolder, string zipFileName) /// <summary> /// 解压文件 /// </summary> /// <param name="lpSourceFolder"> zip文件的源目录 </param> /// <param name="lpDestFolder"> 解压到的目录 </param> /// <param name="zipFileName"> Zip文件名 </param> /// <param name="writeFiles"></param> /// <param name="addExtension"> 增加后缀名 </param> /// <returns></returns> public static GZipResult Decompress( string lpSourceFolder, string lpDestFolder, string zipFileName, bool writeFiles, string addExtension) /// <summary> /// 解压文件 /// </summary> /// <param name="lpSourceFolder"> zip文件的源目录 </param> /// <param name="lpDestFolder"> 解压到的目录 </param> /// <param name="zipFileName"> Zip文件名 </param> /// <param name="deleteTempFile"> 布尔值,如果为true则删除中间临时文件,false则在lpDestFolder保留临时文件(调试用) </param> /// <param name="writeFiles"></param> /// <param name="addExtension"> 增加后缀名 </param> /// <param name="htFiles"></param> /// <param name="bufferSize"></param> /// <returns></returns> public static GZipResult Decompress( string lpSrcFolder, string lpDestFolder, string zipFileName, bool deleteTempFile, bool writeFiles, string addExtension, Hashtable htFiles, int bufferSize)
2)辅助类的使用例子代码如下所示
// 压缩解压缩文本内容 string zippedContent = GZipUtil.Compress( " wuhuacong " ); string original = GZipUtil.Decompress(zippedContent); GZipUtil.Compress(Application.StartupPath, Application.StartupPath, " cityroad.zip " ); GZipUtil.Decompress(Application.StartupPath, Path.Combine(Application.StartupPath, " cityroad " ), " cityroad.zip " ); MessageUtil.ShowTips( " 操作完成 " );
6、字符串Unicode转换操作辅助类 UnicodeHelper。
1)辅助类提供的方法接口如下所示:
/// <summary> /// 将原始字串转换为unicode,格式为\u.\u. /// </summary> /// <param name="str"> 待转换字符串 </param> /// <returns></returns> public static string StringToUnicode( string str) /// <summary> /// 将Unicode字串\u.\u.格式字串转换为原始字符串 /// </summary> /// <param name="str"> 待转换字符串 </param> /// <returns></returns> public static string UnicodeToString( string str) /// <summary> /// GB2312转换成unicode编码 /// </summary> /// <param name="str"> 待转换字符串 </param> /// <returns></returns> public static string GBToUnicode( string str) /// <summary> /// 转换一个字符,输入如"Π"中的"03a0" /// </summary> /// <param name="unicodeSingle"> 待转换字符串 </param> /// <returns></returns> public static string ConvertSingle( string unicodeSingle) /// <summary> /// unicode编码转换成GB2312汉字 /// </summary> /// <param name="str"> 待转换字符串 </param> /// <returns></returns> public static string UnicodeToGB( string str)
2)辅助类的使用例子代码如下所示
private void btnUnicodeHelper_Click( object sender, EventArgs e) { string str = " \u821e\u7fbd\u6e05\u548c \u5c71\u7f8a\u4e4b\u89d2 " ; string test = UnicodeHelper.UnicodeToString(str); string result = test + " \r\n " ; result += UnicodeHelper.StringToUnicode(test) + " \r\n " ; MessageUtil.ShowTips(result); }
主要研究技术:代码生成工具、Visio二次开发、送水管理软件等共享软件开发
专注于 Winform开发框架 、WCF开发框架的研究及应用。
转载请注明出处:
撰写人:伍华聪 http://HdhCmsTestiqidi测试数据
标签: 公用类库使用帮助
作者: Leo_wl
出处: http://HdhCmsTestcnblogs测试数据/Leo_wl/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
版权信息