厚积薄发,丰富的公用类库积累,助你高效进行系统开发(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);
}  

本文转自博客园伍华聪的博客,原文链接:厚积薄发,丰富的公用类库积累,助你高效进行系统开发(13)--- 各种常用的辅助类2,如需转载请自行联系原博主。

时间: 2024-09-20 05:40:27

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

硅谷杂志:各大医院信息化助推自助挂号系统开发

[硅谷网12月12日文]据<硅谷>杂志2012年第18期刊文,随着医院的信息化的不断推进,患者对医院服务上的要求越来越高,自助系统的使用可以在减少排队及方便患者就医方面提供不可替代的作用.我院采购的自助挂号机因未提供前台软件与HIS系统的接口,请来的工程师对HIS及其他接口的流程又不太熟,导致不能使用.无奈只好亲自上阵, 经过一段时间的摸索,完成自助挂号系统的开发工作. 1编程分析 1.1程序要实现的基本功能和实现思路 自助挂号机看似很神秘.很高贵.还很神奇, 其实说白了就是一台没有键盘和鼠标

C#开发串口总结,并提炼串口辅助类到公用类库中

开发C#相关的项目有很多年了,一直没有接触串口的开发,近期由于工作的需要,需要了解熟悉对硬件串口的开发,通过对串口的深入了解,串口也不再是什么神秘的东西,利用SerailPort组件,对串口的各种操作也非常的方便,由于本人总是喜欢把一些常用的东西封装成可供重复利用的类库,因此,阅百家代码,提炼总结优化,把对串口的操作封装成一个公用的类库,应付日常的串口编程开发,也算是工作的一个阶段性总结吧. 先上图,了解串口的一些基本的东西,并逐步介绍相关的知识.   微软在 .NET FrameWork2.0

Winform开发几个常用的开发经验及知识积累(一)

本人做Winform开发多年,孜孜不倦,略有小成,其中收集或者自己开发一些常用的东西,基本上在各个项目都能用到的一些开发经验及知识积累,现逐步介绍一些,以飨读者,共同进步.  1.窗口[×]关闭按钮变为最小化,并在托盘提示信息 一般有些管理系统,为了防止客户随意关闭程序或者基于其他原因,一般会把 窗口[×]关闭按钮变为最小化,如大家熟悉的飞信.MSN等等,但是有些不是很熟悉的客户,最小化到托盘的时候,却不知道程序到了那里去了,因此,最小化的时候,伴随一个气泡提示信息,显得有一定的必要,如下截图所

医疗信息整合管控方案 助医院高效管理

本文讲的是医疗信息整合管控方案 助医院高效管理,随着医疗卫生体制改革的深入以及医院业务的发展,医疗行业信息化面临的挑战越来越多,也越来越复杂.医院信息化面临以下挑战:异构系统多,信息孤岛成为信息发展的绊脚石,不能满足医院即时的业务调整需要;医院管理者难以有效监控医院业务运行情况;服务地点聚焦于医院,便捷即时服务手段少,无法满足老百姓方便.快捷获取医疗服务的需求等.区域医疗信息化面临以下挑战:异构系统更庞杂,机构间的数据标准不统一,分享难;业务特点不同,管理标准不同;集团医院管理者难以实时.有效的

AForge类库与Arcgis接口在win8系统下有冲突吗!!??

问题描述 大家好,请帮帮忙.我在我的arcgis外业数据采集程序里面,通过AForge类库来调用摄像头拍照,在win764位系统的台式机上编译通过,能够执行(用的VS2010,台式机上无摄像头),然后在win8系统的平板电脑上执行,电脑无反应,也不报错.通过我自己的实验已知,去掉AForge类库引用,arcgis数据采集部分能够在平板上正常运行,单独写一个用AForge类库调用摄像头拍照的小程序也能够正常执行,但在这个小程序上加入arcgis相关引用,就无法执行程序.请教达人,急急!! 解决方案

Office第三方插件助您高效办公

Office版本不断更新,但仍不能满足所有的需求,比如新的Ribbon界面让老用户一时无法适应.一些同类软件提供的功能微软却没有提供等.我们可以利用第三方插件来打造更完美的Office. 标签式文档,单窗口编辑多个文件 我们经常需要同时用Word编辑多个文档,而每打开一个新文档,就打开一个新窗口.这样一来,同时编辑多个文档必须在各个窗口之间来回切换,窗口多了就会比较麻烦.有了Office Tabs,Office就拥有了标签功能.我们可以在同一个窗口以标签的形式打开多个文档,并且每个标签都显示文档

Win8不好用?简单方法助您还原之前系统

本文向大家介绍如何手动还原以前安装的Windows 替换Windows 8. 步骤 1:确定是否存在 Windows.old 文件夹以及 硬盘上是否有足够的可用空间 1. 双击"计算机",右键" 本地磁盘 (C:) "文件夹,选择属性,查看"本地磁盘(C:)"的可用空间大小. 2. 在"硬盘"区域,双击"本地磁盘(C:)",然后确定是否存在 Windows.old 文件夹. 注意 :如果 Windows.o

java-求助!我想系统的学习Java

问题描述 求助!我想系统的学习Java 我是新手 我想系统的学习Java,请问谁知道下载地址或者给我QQ邮箱:6225358@qq.com谢谢 解决方案 这么巧啊,我准备结合案例系统的写一个java web开发教程,有兴趣的话关注我的博客.现在我的博客一篇文章都没有,不过,今天我就开始写第一篇文章.你关心什么问题?前台html div+css都了解吗? 解决方案二: 自己去了解吧,java基础,jspssh框架... 解决方案三: 哥们给你个中肯的意见,你可以去传智博客下载学习基础视频资料,看看

springmvc-求助:Springmvc+mybatis+maven开发的web应用,局域IP不可以

问题描述 求助:Springmvc+mybatis+maven开发的web应用,局域IP不可以 5C Springmvc+mybatis+maven开发的web应用,启动后,本机可以访问,外部不可以. 本机有Springmvc+mybatis+maven开发的项目A,以及,struts2+spring+mybatis+maven的项目B.两个项目都是使用配置相同的jetty插件启动,本机访问都正常.问题是:项目A,启动后,局域网的同事通过IP无法访问,经过telnet检查,发现端口不通.但是可以