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;
}
}