厚积薄发,丰富的公用类库积累,助你高效进行系统开发(13)--- 各种常用的辅助类2

俗话说,一个好汉十个帮,众人拾柴火焰高等都说明一个道理,有更多的资源,更丰富的积累,都是助你走向成功,走向顶峰的推动力。
本篇的公用类库的介绍主题是程序开发中常用到的一些辅助类,在帮助文档中归类到其他目录下面,本篇主要介绍有注册表的操作、反射操作、正则表达式操作、Zip压缩操作、AD操作、字符串Unicode转换操作等常见但有些凌乱的类库。
本篇继续继续整理优化已有的共用类库,并继续发表随笔介绍公用类库的接口方法以及详细使用操作,力求给自己继续优化,积攒更丰富的公用类库资源,加深了解的同时,也给大家展现公用类库好的方面。
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);    
}  
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容