public sealed class inifile
{
private string path;
/// <summary>
/// 執行個體初始化為指定路徑的ini檔案。
/// </summary>
/// <param name="path">ini檔案路徑。</param>
public inifile(string path)
{
this.path = path;
}
/// 擷取ini檔案的路徑。
public string path
get
{
return path;
}
/// 讀取指定小節下指定條目的字元串。
/// <param name="sectionname">欲在其中查找條目的小節名稱。這個字串不區分大小寫。</param>
/// <param name="keyname">欲擷取的項名或條目名。這個字串不區分大小寫。</param>
/// <param name="defaultvalue">指定的條目沒有找到時傳回的預設值。</param>
/// <returns>指定小節下指定條目的字元串。</returns>
/// <remarks>如果sectionname為null,則傳回所有小節的清單,如果keyname為null,指定小節所有項的清單。</remarks>
public string readstring(string sectionname,string keyname,string defaultvalue)
const int maxsize = 255;
stringbuilder temp = new stringbuilder(maxsize);
getprivateprofilestring(sectionname, keyname, defaultvalue, temp, 255, this.path);
return temp.tostring();
public void writestring(string sectionname, string keyname, string value)
writeprivateprofilestring(sectionname, keyname, value, this.path);
public int readinteger(string sectionname, string keyname, int defaultvalue)
return getprivateprofileint(sectionname, keyname, defaultvalue,this.path);
public void writeinteger(string sectionname, string keyname, int value)
writeprivateprofilestring(sectionname, keyname, value.tostring(), this.path);
public bool readboolean(string sectionname, string keyname, bool defaultvalue)
int temp = defaultvalue ? 1 : 0;
int result = getprivateprofileint(sectionname, keyname, temp, this.path);
return (result == 0 ? false : true);
public void writeboolean(string sectionname, string keyname, bool value)
string temp = value ? "1" : "0";
writeprivateprofilestring(sectionname, keyname, temp, this.path);
/// 删除這個項現有的字串。
/// <param name="sectionname">要設定的項名或條目名。這個字串不區分大小寫。</param>
/// <param name="keyname">要删除的項名或條目名。這個字串不區分大小寫。</param>
public void deletekey(string sectionname,string keyname)
writeprivateprofilestring(sectionname, keyname, null, this.path);
/// 删除這個小節的所有設定項。
/// <param name="sectionname">要删除的小節名。這個字串不區分大小寫。</param>
public void erasesection(string sectionname)
writeprivateprofilestring(sectionname,null,null,this.path);
[dllimport("kernel32")]
public static extern int writeprivateprofilestring(string lpapplicationname, string lpkeyname, string lpstring, string lpfilename);
public static extern int getprivateprofileint(string lpapplicationname, string lpkeyname, int ndefault, string lpfilename);
public static extern int getprivateprofilestring(string lpapplicationname, string lpkeyname, string lpdefault, stringbuilder lpreturnedstring, int nsize, string lpfilename);
}
***************************************************
// 初始化des加密的密鑰和一個随機的、8比特的初始化向量(iv)
private byte[] key_8 = {0x01, 0x23, 0x45, 0x67, 0x89, 0xab, 0xcd, 0xef};
private byte[] iv_8 = {0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef};
/// <summary>
/// des加密字元串
/// </summary>
/// <param name="encryptstring">待加密的字元串</param>
/// <param name="rgbkey">加密密鑰,要求為8位</param>
/// <param name="rgbiv">密鑰向量</param>
/// <returns>加密成功傳回加密後的字元串,失敗傳回源字元串</returns>
private string des_encrypt(string encryptstring, byte[] rgbkey, byte[] rgbiv)
{
try
byte[] inputbytearray = encoding.utf8.getbytes(encryptstring);
descryptoserviceprovider dcsp = new descryptoserviceprovider();
memorystream mstream = new memorystream();
cryptostream cstream = new cryptostream(mstream, dcsp.createencryptor(rgbkey, rgbiv), cryptostreammode.write);
cstream.write(inputbytearray, 0, inputbytearray.length);
cstream.flushfinalblock();
return convert.tobase64string(mstream.toarray());
}
catch
return encryptstring;
/// des解密字元串
/// <param name="decryptstring">待解密的字元串</param>
/// <param name="rgbkey">解密密鑰,要求為8位,和加密密鑰相同</param>
/// <returns>解密成功傳回解密後的字元串,失敗返源字元串</returns>
private string des_decrypt(string decryptstring, byte[] rgbkey, byte[] rgbiv)
byte[] inputbytearray = convert.frombase64string(decryptstring);
cryptostream cstream = new cryptostream(mstream, dcsp.createdecryptor(rgbkey, rgbiv), cryptostreammode.write);
return encoding.utf8.getstring(mstream.toarray());
return decryptstring;