C#對INI文件讀寫


C#本身沒有對INI格式文件的操作類,可以自定義一個IniFile類進行INI文件讀寫。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;

namespace MSFramework.Common
{
    /// <summary>
    /// ini文件類
    /// </summary>
    public class IniFile
    {
        private string m_FileName;

        public string FileName
        {
            get { return m_FileName; }
            set { m_FileName = value; }
        }

        [DllImport("kernel32.dll")]
        private static extern int GetPrivateProfileInt(
            string lpAppName,
            string lpKeyName,
            int nDefault,
            string lpFileName
            );

        [DllImport("kernel32.dll")]
        private static extern int GetPrivateProfileString(
            string lpAppName,
            string lpKeyName,
            string lpDefault,
            StringBuilder lpReturnedString,
            int nSize,
            string lpFileName
            );

        [DllImport("kernel32.dll")]
        private static extern int WritePrivateProfileString(
            string lpAppName,
            string lpKeyName,
            string lpString,
            string lpFileName
            );

        /// <summary>
        /// 構造函數
        /// </summary>
        /// <param name="aFileName">Ini文件路徑</param>
        public IniFile(string aFileName)
        {
            this.m_FileName = aFileName;
        }

        /// <summary>
        /// 構造函數
        /// </summary>
        public IniFile()
        { }

        /// <summary>
        /// [擴展]讀Int數值
        /// </summary>
        /// <param name="section"></param>
        /// <param name="name"></param>
        /// <param name="def">默認值</param>
        /// <returns></returns>
        public int ReadInt(string section, string name, int def)
        {
            return GetPrivateProfileInt(section, name, def, this.m_FileName);
        }

        /// <summary>
        /// [擴展]讀取string字符串
        /// </summary>
        /// <param name="section"></param>
        /// <param name="name"></param>
        /// <param name="def">默認值</param>
        /// <returns></returns>
        public string ReadString(string section, string name, string def)
        {
            StringBuilder vRetSb = new StringBuilder(2048);
            GetPrivateProfileString(section, name, def, vRetSb, 2048, this.m_FileName);
            return vRetSb.ToString();
        }

        /// <summary>
        /// [擴展]寫入Int數值,如果不存在 節-鍵,則會自動創建
        /// </summary>
        /// <param name="section"></param>
        /// <param name="name"></param>
        /// <param name="Ival">寫入值</param>
        public void WriteInt(string section, string name, int Ival)
        {

            WritePrivateProfileString(section, name, Ival.ToString(), this.m_FileName);
        }

        /// <summary>
        /// [擴展]寫入String字符串,如果不存在 節-鍵,則會自動創建
        /// </summary>
        /// <param name="section"></param>
        /// <param name="name"></param>
        /// <param name="strVal">寫入值</param>
        public void WriteString(string section, string name, string strVal)
        {
            WritePrivateProfileString(section, name, strVal, this.m_FileName);
        }

        /// <summary>
        /// 刪除指定的 節
        /// </summary>
        /// <param name="section"></param>
        public void DeleteSection(string section)
        {
            WritePrivateProfileString(section, null, null, this.m_FileName);
        }

        /// <summary>
        /// 刪除全部 節
        /// </summary>
        public void DeleteAllSection()
        {
            WritePrivateProfileString(null, null, null, this.m_FileName);
        }

        /// <summary>
        /// 讀取指定 節-鍵 的值
        /// </summary>
        /// <param name="section"></param>
        /// <param name="name"></param>
        /// <returns></returns>
        public string IniReadValue(string section, string name)
        {
            StringBuilder strSb = new StringBuilder(256);
            GetPrivateProfileString(section, name, "", strSb, 256, this.m_FileName);
            return strSb.ToString();
        }

        /// <summary>
        /// 寫入指定值,如果不存在 節-鍵,則會自動創建
        /// </summary>
        /// <param name="section"></param>
        /// <param name="name"></param>
        /// <param name="value"></param>
        public void IniWriteValue(string section, string name, string value)
        {
            WritePrivateProfileString(section, name, value, this.m_FileName);
        }
    }
}

 應用:

 有原始INI文件:

執行代碼:

            IniFile myIni = new IniFile(Environment.CurrentDirectory + "\\Config.ini");
            myIni.WriteInt("Tsection", "tName", 89);
            Console.WriteLine(myIni.ReadString("System", "MainFormName", ""));
            Console.WriteLine(myIni.ReadString("DbServer", "DbFile", ""));
            myIni.WriteString("DbServer", "DbFile", @"E:\Work\test2.db");
            Console.WriteLine(myIni.ReadString("DbServer", "DbServer", ""));
            Console.WriteLine(myIni.ReadString("DbServer", "DbFile", ""));

 

執行結果:

 

 

http://www.cnblogs.com/CUIT-DX037/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM