天天看點

winform程式設計——做過ini配置檔案建立檔案、添加配置項,修改配置項,删除配置項

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;