C#讀寫INI文件

C#讀寫INI文件

【文檔介紹來源網絡】

INI文件就是擴展名爲“ini”的文件。在Windows系統中,INI文件是很多,最重要的就是“System.ini”“System32.ini”“Win.ini”。該文件主要存放用戶所做的選擇以及系統的各種參數。用戶可以通過修改INI文件,來改變應用程序和系統的很多配置。但自從Windows 95的退出,在Windows系統中引入了註冊表的概念,INI文件在Windows系統的地位就開始不斷下滑,這是因爲註冊表的獨特優點,使應用程序和系統都把許多參數和初始化信息放進了註冊表中。但在某些場合,INI文件還擁有其不可替代的地位。本文就來探討一下C#是如何對INI進行讀寫操作。


INI文件的結構
    INI
文件是一種按照特點方式排列的文本文件。每一個INI文件構成都非常類似,由若干段落(section)組成,在每個帶括號的標題下面,是若干個以單個單詞開頭的關鍵詞(keyword)和一個等號,等號右邊的就是關鍵字對應的值(value)。其一般形式如下:

[Section1]

  KeyWord1 = Valuel

  KeyWord2 = Value2

   ……

[Section2]

  KeyWord3 = Value3

  KeyWord4 = Value4

本文中介紹的程序設計及運行環境:
          ●
微軟視窗2000 高級服務器
          ● .Net Framework SDK
正式版


C#和Win32 API函數
    C
#並不像C++,擁有屬於自己的類庫。C#使用的類庫是.Net框架爲所有.Net程序開發提供的一個共有的類庫——.Net FrameWork SDK。雖然.Net FrameWork SDK內容十分龐大,功能也非常強大,但還不能面面俱到,至少它並沒有提供直接操作INI文件所需要的相關的類。在本文中,C#操作INI文件使用的是Windows系統自帶Win32API函數——WritePrivateProfileString()和GetPrivateProfileString()函數。這二個函數都位於“kernel32.dll”文件中。


    
我們知道在C#中使用的類庫都是託管代碼(Managed Code)文件,而Win32API函數所處的文件,都是非託管代碼(Unmanaged Code)文件。這就導致了在C#中不可能直接使用這些非託管代碼文件中的函數。好在.Net框架爲了保持對下的兼容,也爲了充分利用以前的資源,提出了互操作,通過互操作可以實現對Win32API函數的調用。互操作不僅適用於Win32API函數,還可以用來訪問託管的COM對象。C#中對Win32API函數的互操作是通過命名空間“System.Runtime.InteropServices”中的“DllImport”特徵類來實現的。它的主要作用是指示此屬性化方法是作爲非託管DLL的輸出實現的。下面代碼就是在C#利用命名空間“System.Runtime.InteropServices”中的“DllImport”特徵類申明上面二個Win32API函數:

C
#申明INI文件的寫操作函數WritePrivateProfileString():
[DllImport ("kernel32")]

private static extern long WritePrivateProfileString ( string section , string key , string val , string filePath ) ;

參數說明:sectionINI文件中的段落;keyINI文件中的關鍵字;valINI文件中關鍵字的數值;filePathINI文件的完整的路徑和名稱。

C
#申明INI文件的讀操作函數GetPrivateProfileString():
[ DllImport ( "kernel32" ) ]

private static extern int GetPrivateProfileString ( string section ,
string key , string def , StringBuilder retVal , int size , string filePath ) ;

    參數說明:sectionINI文件中的段落名稱;keyINI文件中的關鍵字;def:無法讀取時候時候的缺省數值;retVal:讀取數值;size:數值的大小;filePathINI文件的完整路徑和名稱。


實例代碼:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Text;

using System.Windows.Forms;

//using System.Runtime.InteropServices;

 

namespace 讀寫INI文件

{

    public partial class Form1 : Form

    {

        [System.Runtime.InteropServices.DllImport("Kernel32.dll")]

        private static extern long WritePrivateProfileString(string section,

   string key, string val, string filePath);


        [System.Runtime.InteropServices.DllImportAttribute("Kernel32.dll")]

        private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);

        private string CurrentExeName;

        private string IniFileName;


        public Form1()

        {

            InitializeComponent();

            CurrentExeName = System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName;

            IniFileName = System.IO.Path.GetDirectoryName(CurrentExeName)+"//Test.ini";          

            this.textBox1.Text = "";

        }


        private void buttonWriteIni_Click(object sender, EventArgs e)

        {       

            WritePrivateProfileString("Info", "CompanyName", "PG", IniFileName);

            WritePrivateProfileString("Info", "EmployeeNum", "800", IniFileName);

            MessageBox.Show("INI文件寫入成功!", "信息提示", MessageBoxButtons.OK, MessageBoxIcon.Information);

            this.textBox1.Text = "";

        }


        private void buttonReadIni_Click(object sender, EventArgs e)

        {

            System.Text.StringBuilder sBuilder = new StringBuilder(255);

            this.textBox1.Text = GetPrivateProfileString("Info", "CompanyName", "Error", sBuilder, 255, IniFileName).ToString();

            this.textBox2.Text = GetPrivateProfileString("Info", "EmployeeNum", "Error", sBuilder, 255, IniFileName).ToString();

        }

    }

}

 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章