C#操作INI檔案(調用WindowsAPI函數:WritePrivateProfileString,GetPrivateProfileString)

來源:互聯網
上載者:User

 

[DllImport(kernel32.dll)]

引入kernel32.dll這個動態連結程式庫,在這個動態連結程式庫中包含了很多的windows api 函數,在windows api 對ini檔案讀寫的方法經常被用到,下面摘錄了別人的一段較詳細的資料

namespace APIMethod
{

    /// <summary>
    /// Ini檔案操作類
    /// </summary>
    public sealed class IniUtility
    {
        private static string _filePath = string.Empty;//檔案路徑

        /// <summary>
        /// 檔案路徑
        /// </summary>
        public static string FilePath
        {
            get { return _filePath; }
            set { _filePath = value; }
        }

        /// <summary>
        /// Windows API 對INI檔案寫方法
        /// </summary>
        /// <param name="lpApplicationName">要在其中寫入新字串的小節名稱。這個字串不區分大小寫</param>
        /// <param name="lpKeyName">要設定的項名或條目名。這個字串不區分大小寫。用null可刪除這個小節的所有設定項</param>
        /// <param name="lpString">指定為這個項寫入的字串值。用null表示刪除這個項現有的字串</param>
        /// <param name="lpFileName">初始設定檔案的名字。如果沒有指定完整路徑名,則windows會在windows目錄尋找檔案。如果檔案沒有找到,則函數會建立它</param>
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string lpApplicationName, string lpKeyName, string lpString, string lpFileName);

        /// <summary>
        /// Windows API 對INI檔案讀方法
        /// </summary>
        /// <param name="lpApplicationName">欲在其中尋找條目的小節名稱。這個字串不區分大小寫。如設為null,就在lpReturnedString緩衝區內裝載這個ini檔案所有小節的列表</param>
        /// <param name="lpKeyName">欲擷取的項名或條目名。這個字串不區分大小寫。如設為null,就在lpReturnedString緩衝區內裝載指定小節所有項的列表</param>
        /// <param name="lpDefault">指定的條目沒有找到時返回的預設值。可設為空白("")</param>
        /// <param name="lpReturnedString">指定一個字串緩衝區,長度至少為nSize</param>
        /// <param name="nSize">指定裝載到lpReturnedString緩衝區的最大字元數量</param>
        /// <param name="lpFileName">初始設定檔案的名字。如沒有指定一個完整路徑名,windows就在Windows目錄中尋找檔案</param>
        /// 注意:如lpKeyName參數為null,那麼lpReturnedString緩衝區會載入指定小節所有設定項的一個列表。
        /// 每個項都用一個NULL字元分隔,最後一個項用兩個NULL字元中止。也請參考GetPrivateProfileInt函數的註解
        /// <returns></returns>
        [System.Runtime.InteropServices.DllImport("kernel32")]
        private static extern long GetPrivateProfileString(string lpApplicationName, string lpKeyName, string lpDefault, System.Text.StringBuilder lpReturnedString, int nSize, string lpFileName);

        /// <summary>
        /// 向Ini檔案中寫入值
        /// </summary>
        /// <param name="section">小節的名稱</param>
        /// <param name="key">鍵的名稱</param>
        /// <param name="value">鍵的值</param>
        /// <returns>執行成功為True,失敗為False。</returns>
        public static long WriteIniKey(string section, string key, string value)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0 ||
                value.Trim().Length <= 0) return 0;

            return WritePrivateProfileString(section, key, value, FilePath);
        }

        /// <summary>
        /// 刪除指定小節中的鍵
        /// </summary>
        /// <param name="section">小節的名稱</param>
        /// <param name="key">鍵的名稱</param>
        /// <returns>執行成功為True,失敗為False。</returns>
        public static long DeleteIniKey(string section, string key)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0) return 0;

            return WritePrivateProfileString(section, key, null, FilePath);
        }

        /// <summary>
        /// 刪除指定的小節(包括這個小節中所有的鍵)
        /// </summary>
        /// <param name="section">小節的名稱</param>
        /// <returns>執行成功為True,失敗為False。</returns>
        public static long DeleteIniSection(string section)
        {
            if (section.Trim().Length <= 0) return 0;

            return WritePrivateProfileString(section, null, null, FilePath);
        }

        /// <summary>
        /// 獲得指定小節中鍵的值
        /// </summary>
        /// <param name="section">小節的名稱</param>
        /// <param name="key">鍵的名稱</param>
        /// <param name="defaultValue">如果索引值為空白,或沒找到,返回指定的預設值。</param>
        /// <param name="capacity">緩衝區初始化大小。</param>
        /// <returns>鍵的值</returns>
        public static string GetIniKeyValue(string section, string key,string defaultValue,int capacity)
        {
            if (section.Trim().Length <= 0 || key.Trim().Length <= 0) return defaultValue;

            System.Text.StringBuilder strTemp = new System.Text.StringBuilder(capacity);
            long returnValue = GetPrivateProfileString(section, key, defaultValue, strTemp, capacity, FilePath);

            return strTemp.ToString().Trim();
        }

        /// <summary>
        /// 獲得指定小節中鍵的值
        /// </summary>
        /// <param name="section">小節的名稱</param>
        /// <param name="key">鍵的名稱</param>
        /// <param name="defaultValue">如果索引值為空白,或沒找到,返回指定的預設值。</param>
        /// <returns>鍵的值</returns>
        public static string GetIniKeyValue(string section, string key, string defaultValue)
        {
            return GetIniKeyValue(section, key, defaultValue, 1024);
        }

        /// <summary>
        /// 獲得指定小節中鍵的值
        /// </summary>
        /// <param name="section">小節的名稱</param>
        /// <param name="key">鍵的名稱</param>
        /// <returns>鍵的值</returns>
        public static string GetIniKeyValue(string section, string key)
        {
            return GetIniKeyValue(section, key, string.Empty, 1024);
        }
    }
}

源地址:http://kb.cnblogs.com/a/1209300/

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.