1. 用于获取或设置Web.config/*.exe.config中节点数据的辅助类
/// <summary>/// 用于获取或设置Web.config/*.exe.config中节点数据的辅助类/// </summary>public sealed class AppConfig{private string filePath;/// <summary>/// 从当前目录中按顺序检索Web.Config和*.App.Config文件。/// 如果找到一个,则使用它作为配置文件;否则会抛出一个ArgumentNullException异常。/// </summary>public AppConfig(){string webconfig = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Web.Config");string appConfig = AppDomain.CurrentDomain.SetupInformation.ConfigurationFile.Replace(".vshost", "");if (File.Exists(webconfig)){filePath = webconfig;}else if (File.Exists(appConfig)){filePath = appConfig;}else{throw new ArgumentNullException("没有找到Web.Config文件或者应用程序配置文件, 请指定配置文件");}}/// <summary>/// 用户指定具体的配置文件路径/// </summary>/// <param name="configFilePath">配置文件路径(绝对路径)</param>public AppConfig(string configFilePath){filePath = configFilePath;}/// <summary>/// 设置程序的config文件/// </summary>/// <param name="keyName">键名</param>/// <param name="keyValue">键值</param>public void AppConfigSet(string keyName, string keyValue){//由于存在多个Add键值,使得访问appSetting的操作不成功,故注释下面语句,改用新的方式/* string xpath = "//add[@key='" + keyName + "']";XmlDocument document = new XmlDocument();document.Load(filePath);XmlNode node = document.SelectSingleNode(xpath);node.Attributes["value"].Value = keyValue;document.Save(filePath); */XmlDocument document = new XmlDocument();document.Load(filePath);XmlNodeList nodes = document.GetElementsByTagName("add");for (int i = 0; i < nodes.Count; i++){//获得将当前元素的key属性XmlAttribute attribute = nodes[i].Attributes["key"];//根据元素的第一个属性来判断当前的元素是不是目标元素if (attribute != null && (attribute.Value == keyName)){attribute = nodes[i].Attributes["value"];//对目标元素中的第二个属性赋值if (attribute != null){attribute.Value = keyValue;break;}}}document.Save(filePath);}/// <summary>/// 读取程序的config文件的键值。/// 如果键名不存在,返回空/// </summary>/// <param name="keyName">键名</param>/// <returns></returns>public string AppConfigGet(string keyName){string strReturn = string.Empty;try{XmlDocument document = new XmlDocument();document.Load(filePath);XmlNodeList nodes = document.GetElementsByTagName("add");for (int i = 0; i < nodes.Count; i++){//获得将当前元素的key属性XmlAttribute attribute = nodes[i].Attributes["key"];//根据元素的第一个属性来判断当前的元素是不是目标元素if (attribute != null && (attribute.Value == keyName)){attribute = nodes[i].Attributes["value"];if (attribute != null){strReturn = attribute.Value;break;}}}}catch{;}return strReturn;}/// <summary>/// 获取指定键名中的子项的值/// </summary>/// <param name="keyName">键名</param>/// <param name="subKeyName">以分号(;)为分隔符的子项名称</param>/// <returns>对应子项名称的值(即是=号后面的值)</returns>public string GetSubValue(string keyName, string subKeyName){string connectionString = AppConfigGet(keyName).ToLower();string[] item = connectionString.Split(new char[] {';'});for (int i = 0; i < item.Length; i++){string itemValue = item[i].ToLower();if (itemValue.IndexOf(subKeyName.ToLower()) >= 0) //如果含有指定的关键字{int startIndex = item[i].IndexOf("="); //等号开始的位置return item[i].Substring(startIndex + 1); //获取等号后面的值即为Value}}return string.Empty;}
}
AppConfig测试代码:
public class TestAppConfig{public static string Execute(){string result = string.Empty;//读取Web.Config的AppConfig config = new AppConfig();result += "读取Web.Config中的配置信息:" + "\r\n";result += config.AppName + "\r\n";result += config.AppConfigGet("WebConfig") + "\r\n";config.AppConfigSet("WebConfig", DateTime.Now.ToString("hh:mm:ss"));result += config.AppConfigGet("WebConfig") + "\r\n\r\n";//读取*.App.Config的config = new AppConfig("TestUtilities.exe.config");result += "读取TestUtilities.exe.config中的配置信息:" + "\r\n";result += config.AppName + "\r\n";result += config.AppConfigGet("AppConfig") + "\r\n";config.AppConfigSet("AppConfig", DateTime.Now.ToString("hh:mm:ss"));result += config.AppConfigGet("AppConfig") + "\r\n\r\n";return result;}}
2. 反射操作辅助类ReflectionUtil
/// <summary>/// 反射操作辅助类/// </summary>public sealed class ReflectionUtil{private ReflectionUtil(){}private static BindingFlags bindingFlags = 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){object objResult = null;Type type = obj.GetType();objResult = type.InvokeMember(methodName, bindingFlags | BindingFlags.InvokeMethod, null, obj, args);return objResult;}/// <summary>/// 设置对象字段的值/// </summary>public static void SetField(object obj, string name, object value){FieldInfo fieldInfo = obj.GetType().GetField(name, bindingFlags);object objValue = Convert.ChangeType(value, fieldInfo.FieldType);fieldInfo.SetValue(objValue, value);}/// <summary>/// 获取对象字段的值/// </summary>public static object GetField(object obj, string name){FieldInfo fieldInfo = obj.GetType().GetField(name, bindingFlags);return fieldInfo.GetValue(obj);}/// <summary>/// 设置对象属性的值/// </summary>public static void SetProperty(object obj, string name, object value){PropertyInfo propertyInfo = obj.GetType().GetProperty(name, bindingFlags);object objValue = Convert.ChangeType(value, propertyInfo.PropertyType);propertyInfo.SetValue(obj, objValue, null);}/// <summary>/// 获取对象属性的值/// </summary>public static object GetProperty(object obj, string name){PropertyInfo propertyInfo = obj.GetType().GetProperty(name, bindingFlags);return propertyInfo.GetValue(obj, null);}/// <summary>/// 获取对象属性信息(组装成字符串输出)/// </summary>public static string GetProperties(object obj){StringBuilder strBuilder = new StringBuilder();PropertyInfo[] propertyInfos = obj.GetType().GetProperties(bindingFlags);foreach (PropertyInfo property in propertyInfos){strBuilder.Append(property.Name);strBuilder.Append(":");strBuilder.Append(property.GetValue(obj, null));strBuilder.Append("\r\n");}return strBuilder.ToString();}}
反射操作辅助类ReflectionUtil测试代码:
public class TestReflectionUtil{public static string Execute(){string result = string.Empty;result += "使用ReflectionUtil反射操作辅助类:" + "\r\n";try{Person person = new Person();person.Name = "wuhuacong";person.Age = 20;result += DecriptPerson(person);person.Name = "Wade Wu";person.Age = 99;result += DecriptPerson(person);}catch (Exception ex){result += string.Format("发生错误:{0}!\r\n \r\n", ex.Message);}return result;}public static string DecriptPerson(Person person){string result = string.Empty;result += "name:" + ReflectionUtil.GetField(person, "name") + "\r\n";result += "age" + ReflectionUtil.GetField(person, "age") + "\r\n";result += "Name:" + ReflectionUtil.GetProperty(person, "Name") + "\r\n";result += "Age:" + ReflectionUtil.GetProperty(person, "Age") + "\r\n";result += "Say:" + ReflectionUtil.InvokeMethod(person, "Say", new object[] {}) + "\r\n";result += "操作完成!\r\n \r\n";return result;}}
3. 注册表访问辅助类RegistryHelper
/// <summary>/// 注册表访问辅助类/// </summary>public sealed class RegistryHelper{private string softwareKey = string.Empty;private RegistryKey rootRegistry = Registry.CurrentUser;/// <summary>/// 使用注册表键构造,默认从Registry.CurrentUser开始。/// </summary>/// <param name="softwareKey">注册表键,格式如"SOFTWARE\\Huaweisoft\\EDNMS"的字符串</param>public RegistryHelper(string softwareKey) : this(softwareKey, Registry.CurrentUser){}/// <summary>/// 指定注册表键及开始的根节点查询/// </summary>/// <param name="softwareKey">注册表键</param>/// <param name="rootRegistry">开始的根节点(Registry.CurrentUser或者Registry.LocalMachine等)</param>public RegistryHelper(string softwareKey, RegistryKey rootRegistry){this.softwareKey = softwareKey;this.rootRegistry = rootRegistry;}/// <summary>/// 根据注册表的键获取键值。/// 如果注册表的键不存在,返回空字符串。/// </summary>/// <param name="key">注册表的键</param>/// <returns>键值</returns>public string GetValue(string key){const string parameter = "key";if (null == key){throw new ArgumentNullException(parameter);}string result = string.Empty;try{RegistryKey registryKey = rootRegistry.OpenSubKey(softwareKey);result = registryKey.GetValue(key).ToString();}catch{;}return result;}/// <summary>/// 保存注册表的键值/// </summary>/// <param name="key">注册表的键</param>/// <param name="value">键值</param>/// <returns>成功返回true,否则返回false.</returns>public bool SaveValue(string key, string value){const string parameter1 = "key";const string parameter2 = "value";if (null == key){throw new ArgumentNullException(parameter1);}if (null == value){throw new ArgumentNullException(parameter2);}RegistryKey registryKey = rootRegistry.OpenSubKey(softwareKey, true);if (null == registryKey){registryKey = rootRegistry.CreateSubKey(softwareKey);}registryKey.SetValue(key, value);return true;}}
注册表访问辅助类RegistryHelper测试代码:
public class TestRegistryHelper{public static string Execute(){string result = string.Empty;result += "使用RegistryHelper注册表访问辅助类:" + "\r\n";RegistryHelper registry = new RegistryHelper("SoftWare\\HuaweiSoft\\EDNMS");bool sucess = registry.SaveValue("Test", DateTime.Now.ToString("hh:mm:ss"));if (sucess){result += registry.GetValue("Test");}return result;}}
4. 压缩/解压缩辅助类ZipUtil
/// <summary>/// 压缩/解压缩辅助类/// </summary>public sealed class ZipUtil{private ZipUtil(){}/// <summary>/// 压缩文件操作/// </summary>/// <param name="fileToZip">待压缩文件名</param>/// <param name="zipedFile">压缩后的文件名</param>/// <param name="compressionLevel">0~9,表示压缩的程度,9表示最高压缩</param>/// <param name="blockSize">缓冲块大小</param>public static void ZipFile(string fileToZip, string zipedFile, int compressionLevel, int blockSize){if (! File.Exists(fileToZip)){throw new FileNotFoundException("文件 " + fileToZip + " 没有找到,取消压缩。");}using (FileStream streamToZip = new FileStream(fileToZip, FileMode.Open, FileAccess.Read)){FileStream fileStream = File.Create(zipedFile);using (ZipOutputStream zipStream = new ZipOutputStream(fileStream)){ZipEntry zipEntry = new ZipEntry(fileToZip);zipStream.PutNextEntry(zipEntry);zipStream.SetLevel(compressionLevel);byte[] buffer = new byte[blockSize];Int32 size = streamToZip.Read(buffer, 0, buffer.Length);zipStream.Write(buffer, 0, size);try{while (size < streamToZip.Length){int sizeRead = streamToZip.Read(buffer, 0, buffer.Length);zipStream.Write(buffer, 0, sizeRead);size += sizeRead;}}catch (Exception ex){throw ex;}zipStream.Finish();}}}/// <summary>/// 打开sourceZipPath的压缩文件,解压到destPath目录中/// </summary>/// <param name="sourceZipPath">待解压的文件路径</param>/// <param name="destPath">解压后的文件路径</param>public static void UnZipFile(string sourceZipPath, string destPath){if (!destPath.EndsWith(Path.DirectorySeparatorChar.ToString())){destPath = destPath + Path.DirectorySeparatorChar;}using (ZipInputStream zipInputStream = new ZipInputStream(File.OpenRead(sourceZipPath))){ZipEntry theEntry;while ((theEntry = zipInputStream.GetNextEntry()) != null){string fileName = destPath + Path.GetDirectoryName(theEntry.Name) +Path.DirectorySeparatorChar + Path.GetFileName(theEntry.Name);//create directory for file (if necessary)Directory.CreateDirectory(Path.GetDirectoryName(fileName));if (!theEntry.IsDirectory){using (FileStream streamWriter = File.Create(fileName)){int size = 2048;byte[] data = new byte[size];try{while (true){size = zipInputStream.Read(data, 0, data.Length);if (size > 0){streamWriter.Write(data, 0, size);}else{break;}}}catch{}}}}}}}
压缩/解压缩辅助类ZipUtil测试代码:
public class TestZipUtil{public static string Execute(){string result = string.Empty;result += "使用ZipUtil压缩/解压缩辅助类:" + "\r\n";try{ZipUtil.ZipFile("Web.Config", "Test.Zip", 6, 512);ZipUtil.UnZipFile("Test.Zip", "Test");result += "操作完成!\r\n \r\n";}catch (Exception ex){result += string.Format("发生错误:{0}!\r\n \r\n", ex.Message);}return result;}}
============================
声明:本文是转载过来的,由于时间过去太久已经找不到原文链接了,如有知道原文链接的麻烦告知一下。另外如有侵权请联系我更改或删除,谢谢。