1. 程式人生 > >C#讀取ini配置檔案注意的問題

C#讀取ini配置檔案注意的問題

C#和Win32 API函式

C#並不像C++,擁有屬於自己的類庫。C#使用的類庫是.Net框架為所有.Net程式開發提供的一個共有的類庫――.Net FrameWork SDK。雖然.Net FrameWork SDK內容十分龐大,功能也非常強大,但還不能面面俱到,至少它並沒有提供直接操作INI檔案所需要的相關的類。在本文中,C#操作INI檔案使用的是Windows系統自帶Win32的API函式――WritePrivateProfileString()和GetPrivateProfileString()函式。這二個函式都位於“kernel32.dll”檔案中。 我們知道在C#中使用的類庫都是託管程式碼(Managed Code)檔案,而Win32的API函式所處的檔案,都是非託管程式碼(Unmanaged Code)檔案。這就導致了在C#中不可能直接使用這些非託管程式碼檔案中的函式。好在.Net框架為了保持對下的相容,也為了充分利用以前的資源,提出了互操作,通過互操作可以實現對Win32的API函式的呼叫。互操作不僅適用於Win32的API函式,還可以用來訪問託管的COM物件。C#中對Win32的API函式的互操作是通過名稱空間“System.Runtime.InteropServices”中的“DllImport”特徵類來實現的。它的主要作用是指示此屬性化方法是作為非託管DLL的輸出實現的。下面程式碼就是在C#利用名稱空間“System.Runtime.InteropServices”中的“DllImport”特徵類申明上面二個Win32的API函式: C#申明INI檔案的寫操作函式WritePrivateProfileString

  [DllImport("kernel32")]
        private static extern long WritePrivateProfileString(string
section,
            string key, string val, string filePath);
        [DllImport("kernel32")]
        private static extern int GetPrivateProfileString(string section,
            string key, string def, StringBuilder retVal,
            int size, string filePath);
       
        private void 開始ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            string str1 = Application.StartupPath + "\\Config.ini";//獲取啟動了應用程式的可執行檔案的路徑,不包括可執行檔案的名稱。
            StringBuilder temp = new StringBuilder(255);
           StringBuilder stringBud = new StringBuilder(50);
            int i = GetPrivateProfileString("ReaderConfigInfo", "Reader_Num",
                      "無法讀取對應數值!", temp, 255, str1);
            string a=temp.ToString();
            int MyInt = Convert.ToInt32(a);
         
        }