厚積薄發(fā),豐富的公用類庫積累,助你高效進行系統(tǒng)開發(fā)(13)--- 各種常用的輔助類2

俗話說,一個好漢十個幫,眾人拾柴火焰高等都說明一個道理,有更多的資源,更豐富的積累,都是助你走向成功,走向頂峰的推動力。
本篇的公用類庫的介紹主題是程序開發(fā)中常用到的一些輔助類,在幫助文檔中歸類到其他目錄下面,本篇主要介紹有注冊表的操作、反射操作、正則表達式操作、Zip壓縮操作、AD操作、字符串Unicode轉換操作等常見但有些凌亂的類庫。
本篇繼續(xù)繼續(xù)整理優(yōu)化已有的共用類庫,并繼續(xù)發(fā)表隨筆介紹公用類庫的接口方法以及詳細使用操作,力求給自己繼續(xù)優(yōu)化,積攢更豐富的公用類庫資源,加深了解的同時,也給大家展現(xiàn)公用類庫好的方面。
1、 注冊表操作輔助類RegistryHelper,通過默認指定注冊表的前綴路徑,減少調(diào)用復雜性。
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">開始的根節(jié)點(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">鍵的值內(nèi)容</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">鍵的值內(nèi)容</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">鍵的值內(nèi)容</param>    
/// <param name="rootRegistry">開始的根節(jié)點(Registry.CurrentUser或者Registry.LocalMachine等)</param>    
/// <returns>如果保存成功返回true,否則為false</returns>    
public static bool SaveValue(string softwareKey, string key, string value, RegistryKey rootRegistry)   
  
#endregion   
  
#region 自動啟動程序設置    
   
/// <summary>    
/// 檢查是否隨系統(tǒng)啟動    
/// </summary>    
/// <returns></returns>    
public static bool CheckStartWithWindows()    
   
/// <summary>    
/// 設置隨系統(tǒng)啟動    
/// </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", "測試內(nèi)容", Microsoft.Win32.Registry.LocalMachine);    
    result += RegistryHelper.GetValue(softwareKey, "Test", Microsoft.Win32.Registry.LocalMachine);     
   
    MessageUtil.ShowTips(result);    
} 

演示代碼效果如下所示。

2、 反射操作輔助類ReflectionUtil,如獲取或設置字段、屬性的值等反射信息。
本輔助類主要是用來方便實現(xiàn)反射操作輔助類,如獲取或設置字段、屬性的值等反射信息。 在通用的賦值操作(屬性或者字段)、執(zhí)行方法或者需要獲取特定對象屬性的時候,就需要大量用到反射操作。
1)輔助類提供的方法接口如下所示:

#region 屬性字段設置    
/// <summary>    
/// 綁定標識    
/// </summary>    
public static BindingFlags bf = BindingFlags.DeclaredOnly | BindingFlags.Public |    
                        BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static;    
   
/// <summary>    
/// 執(zhí)行方法    
/// </summary>    
/// <param name="obj">對象實例</param>    
/// <param name="methodName">方法名稱</param>    
/// <param name="args">參數(shù)</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內(nèi)容    
/// </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內(nèi)容    
/// </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>    
/// 根據(jù)資源名稱獲取圖片資源流    
/// </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 創(chuàng)建對應實例    
/// <summary>    
/// 創(chuàng)建對應實例    
/// </summary>    
/// <param name="type">類型</param>    
/// <returns>對應實例</returns>    
public static object CreateInstance(string type)    
   
/// <summary>    
/// 創(chuàng)建對應實例    
/// </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("轉換數(shù)據(jù)發(fā)生錯誤:{0}【{1}】",    
                        ex.Message, data));    
                    break;    
                }    
            }    
        }    
    }    
}  

例如兩個對象的屬性基本相同,可以進行對象的拷貝賦值。

#region 表結構一樣,復制相關的內(nèi)容    
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、程序集反射創(chuàng)建對象實例輔助類 Reflect

本輔助類主要是用來方便實現(xiàn)程序集反射創(chuàng)建對象實例的操作。 該程序集反射春節(jié)對象實例的操作,在我的WInform開發(fā)框架中用于對象的創(chuàng)建操作。

1)輔助類提供的方法接口如下所示:

/// <summary>    
/// 程序集反射創(chuàng)建對象實例輔助類    
/// </summary>    
/// <typeparam name="T">對象類型</typeparam>    
public class Reflect<T> where T : class     
{    
    /// <summary>    
    /// 緩存的hash表集合    
    /// </summary>    
    public static Hashtable ObjCache    
   
    /// <summary>    
    /// 根據(jù)參數(shù)創(chuàng)建對象實例    
    /// </summary>    
    /// <param name="sName">對象全局名稱</param>    
    /// <param name="sFilePath">文件路徑</param>    
    /// <returns></returns>    
    public static T Create(string sName, string sFilePath)    
   
    /// <summary>    
    /// 根據(jù)參數(shù)創(chuàng)建對象實例    
    /// </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>    
    /// 創(chuàng)建程序集對象    
    /// </summary>    
    /// <param name="sFilePath">文件路徑</param>    
    /// <returns></returns>    
    public static Assembly CreateAssembly(string sFilePath)    
}  

2)輔助類的使用例子代碼如下所示(摘自我的Winform開發(fā)框架里面的對象反射操作)。在下面的例子中,通過傳入的類型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"); //反射創(chuàng)建,并緩存    
                        //bll = Reflect<T>.Create(typeof(T).FullName, System.Reflection.Assembly.GetExecutingAssembly().GetName().Name); //反射創(chuàng)建,并緩存    
                        objCache.Add(typeof(T).FullName, bll);    
                    }    
                }    
            }    
            return bll;    
        }    
    }    
}   

4、 正則表達式輔助類 CRegex

本輔助類主要是用來方便實現(xiàn)對正則表達式的封裝使用,通過利用該類庫,可以簡化C#對正則表達式的操作,但不能替代掌握正則表達式的知識。 正則表達式可以通過The Reguator等正則表達式調(diào)試工具來驗證編寫的表達式,基本的操作是匹配,替換,分割等,調(diào)試工具界面如下:

1)軟件包含下面基礎通用的操作正則表達式方法的定義,以及一些封裝好的正則表達式操作,如獲取HTML標題、Body等內(nèi)容。
/// <summary>    
/// 內(nèi)容是否匹配指定的表達式    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</param>    
/// <param name="sRegex">表達式字符串</param>    
/// <returns></returns>    
public static bool IsMatch(string sInput, string sRegex)    
   
/// <summary>    
/// 多個匹配內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</param>    
/// <param name="sRegex">表達式字符串</param>    
/// <param name="iGroupIndex">第幾個分組, 從1開始, 0代表不分組</param>    
public static List<string> GetList(string sInput, string sRegex, int iGroupIndex)    
   
/// <summary>    
/// 多個匹配內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</param>    
/// <param name="sRegex">表達式字符串</param>    
/// <param name="sGroupName">分組名, ""代表不分組</param>    
public static List<string> GetList(string sInput, string sRegex, string sGroupName)    
   
/// <summary>    
/// 單個匹配內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</param>    
/// <param name="sRegex">表達式字符串</param>    
/// <param name="iGroupIndex">分組序號, 從1開始, 0不分組</param>    
public static string GetText(string sInput, string sRegex, int iGroupIndex)    
   
/// <summary>    
/// 單個匹配內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</param>    
/// <param name="sRegex">表達式字符串</param>    
/// <param name="sGroupName">分組名, ""代表不分組</param>    
public static string GetText(string sInput, string sRegex, string sGroupName)    
   
/// <summary>    
/// 替換指定內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</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>    
/// 替換指定內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</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>    
/// 分割指定內(nèi)容    
/// </summary>    
/// <param name="sInput">輸入內(nèi)容</param>    
/// <param name="sRegex">表達式字符串</param>    
/// <param name="iStrLen">最小保留字符串長度</param>    
public static List<string> Split(string sInput, string sRegex, int iStrLen)  

5、 壓縮文本、字節(jié)或者文件的壓縮輔助類GZipUtil。

本輔助類主要是用來方便實現(xiàn)壓縮文本、字節(jié)或者文件的壓縮操作。本輔助類使用.NET內(nèi)置的類庫實現(xiàn)壓縮操作。

1)輔助類提供的方法接口如下所示:

/// <summary>    
/// 壓縮字符串    
/// </summary>    
/// <param name="text">待壓縮的文本</param>    
/// <returns>壓縮后的文本內(nèi)容</returns>    
public static string Compress(string text)    
   
/// <summary>    
/// 解壓字符串    
/// </summary>    
/// <param name="compressedText">待解壓縮的文本內(nèi)容</param>    
/// <returns>解壓后的原始文本內(nèi)容</returns>    
public static string Decompress(string compressedText)    
   
/// <summary>    
/// 壓縮流對象    
/// </summary>    
/// <typeparam name="T">對象類型</typeparam>    
/// <param name="stream">流數(shù)據(jù)</param>    
/// <param name="mode">壓縮類型</param>    
/// <returns></returns>    
public static T GZip<T>(Stream stream, CompressionMode mode) where T : Stream    
   
/// <summary>    
/// 壓縮字節(jié)    
/// </summary>    
/// <param name="bytData">待壓縮字節(jié)</param>    
/// <returns>壓縮后的字節(jié)數(shù)組</returns>    
public static byte[] Compress(byte[] bytData)    
   
/// <summary>    
/// 解壓字節(jié)    
/// </summary>    
/// <param name="bytData">待解壓縮字節(jié)</param>    
/// <returns>解壓后的原始字節(jié)內(nèi)容</returns>    
public static byte[] Decompress(byte[] bytData)    
   
/// <summary>    
/// 壓縮Object對象到字節(jié)數(shù)組    
/// </summary>    
/// <param name="obj">待壓縮對象</param>    
/// <returns>壓縮后的字節(jié)數(shù)組</returns>    
public static byte[] ObjectToGZip(object obj)    
   
/// <summary>    
/// 從壓縮的字節(jié)數(shù)組轉換到Object對象    
/// </summary>    
/// <param name="byteArray">待解壓縮的字節(jié)數(shù)據(jù)</param>    
/// <returns>對象</returns>    
public static object GZipToObject(byte[] byteArray)    
   
/// <summary>    
/// 壓縮文件    
/// </summary>    
/// <param name="lpSourceFolder">包括在zip文件中的文件夾路徑,所有文件,包括子文件夾中的文件將包括在內(nèi)。</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保留臨時文件(調(diào)試用)</param>    
public static GZipResult Compress(string lpSourceFolder, string searchPattern, SearchOption searchOption, string lpDestFolder, string zipFileName, bool deleteTempFile)    
   
/// <summary>    
/// 壓縮文件    
/// </summary>    
/// <param name="files">在zip文件中包含的FileInfo對象數(shù)組</param>    
/// <param name="folders">文件夾字符串數(shù)組</param>    
/// <param name="lpBaseFolder">    
/// 基礎文件夾,在創(chuàng)建的zip文件中存儲的文件的相對路徑。例如, 如果lpBaseFolder 是 'C:\zipTest\Files\',    
/// 當存在一個文件 'C:\zipTest\Files\folder1\sample.txt' 在數(shù)組'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對象數(shù)組</param>    
/// <param name="lpBaseFolder">    
/// 基礎文件夾,在創(chuàng)建的zip文件中存儲的文件的相對路徑。例如, 如果lpBaseFolder 是 'C:\zipTest\Files\',    
/// 當存在一個文件 'C:\zipTest\Files\folder1\sample.txt' 在數(shù)組'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對象數(shù)組</param>    
/// <param name="lpBaseFolder">    
/// 基礎文件夾,在創(chuàng)建的zip文件中存儲的文件的相對路徑。例如, 如果lpBaseFolder 是 'C:\zipTest\Files\',    
/// 當存在一個文件 'C:\zipTest\Files\folder1\sample.txt' 在數(shù)組'files'里面, 則 sample.txt 的相對路徑是 'folder1/sample.txt'    
/// </param>    
/// <param name="lpDestFolder">寫入Zip文件的文件夾</param>    
/// <param name="zipFileName">Zip文件名</param>    
/// <param name="deleteTempFile">布爾值,如果為true則刪除中間臨時文件,false則在lpDestFolder保留臨時文件(調(diào)試用)</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保留臨時文件(調(diào)試用)</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)輔助類的使用例子代碼如下所示

//壓縮解壓縮文本內(nèi)容    
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);    
}  
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容