C# 使用動態(tài)庫DllImport("kernel32")讀寫ini文件的步驟
1 ini文件讀寫
kernel32.dll是Windows中非常重要的32位動態(tài)鏈接庫文件,屬于內(nèi)核級文件。它控制著系統(tǒng)的內(nèi)存管理、數(shù)據(jù)的輸入輸出操作和中斷處理,當(dāng)Windows啟動時(shí),kernel32.dll就駐留在內(nèi)存中特定的寫保護(hù)區(qū)域,使別的程序無法占用這個(gè)內(nèi)存區(qū)域。
為什么要來討論讀寫ini文件呢,難道有數(shù)據(jù)庫我們就不用讀寫文件了嗎,什么數(shù)據(jù)都從數(shù)據(jù)庫讀取出來嗎,有些東西是根據(jù)客戶的習(xí)慣,就沒必要去讀取數(shù)據(jù)庫了,或者說,比如你要做一個(gè)記住密碼的功能,如果在web端,你還可以用cookie這東西,但是要是winform呢,這時(shí)候ini文件就可以派上用場了。我們可以把用戶和密碼存在ini文件里。
注意事項(xiàng):
- ini文件路徑必須完整
- 可將ini放在程序所在目錄,此時(shí)IpFileName參數(shù)為“.\FileName.ini”
2 方法
(1)GetPrivateProfileInt :使用該方法可獲取ini類型數(shù)據(jù),未獲取到時(shí)則會取設(shè)置的默認(rèn)數(shù)據(jù)
UINT WINAPI GetPrivateProfileInt ( _In_LPCTSTR lpAppName, //ini文件中區(qū)塊名稱 _In_LPCTSTR lpKeyName, //鍵名 _In_INT nDefault, //默認(rèn)值 _In_LPCTSTR lpFileName //ini文件路徑 );
(2)GetPrivateProfileString:使用該方法可獲取string類型數(shù)據(jù),未獲取到時(shí)則會取設(shè)置的默認(rèn)數(shù)據(jù)
UINT WINAPI GetPrivateProfileString ( _In_LPCTSTR lpAppName, //ini文件中區(qū)塊名稱 _In_LPCTSTR lpKeyName, //鍵名 _In_INT nDefault, //默認(rèn)值 _In_LPSTR lpReturnedString,//接受ini文件中值的CString對象,指定一個(gè)字符串緩沖區(qū),長度至少為nSize _In_DWORD nSize,//指定裝載到IpReturnedString緩沖區(qū)的最大字符數(shù) _In_LPCTSTR lpFileName //ini文件路徑 );
(3)WritePrivateProfileString:向ini中寫值,所以僅有寫入string就足夠了
BOOL WritePrivateProfileString( LPCTSTR lpAppName,//ini文件中區(qū)塊名 LPCTSTR lpKeyName,//鍵名 LPCTSTR lpString,//鍵值 LPCTSTR lpFileName );
3 例子
using System.IO; using System.Runtime.InteropServices; using System.Text; using System.Windows; namespace WpfApplication3 { /// <summary> /// MainWindow.xaml 的交互邏輯 /// </summary> public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); IniClass ini = new IniClass(); string IniPath = System.Windows.Forms.Application.StartupPath + "\\temp.ini";//引用里添加form才可以 string section = "BigBang"; ini.SetPath(IniPath); ini.IniWriteValue(section, "1", "Amy"); ini.IniWriteValue(section, "2", "Sheldon"); string section1 = "Family"; ini.SetPath(IniPath); ini.IniWriteValue(section1, "1", "Phil"); ini.IniWriteValue(section1, "2", "Jay"); string re = ini.IniReadValue(section, "1"); System.Windows.MessageBox.Show(re); } } public class IniClass { [DllImport("kernel32")] private static extern long WritePrivateProfileString(string section, string key, string value, string filepath); [DllImport("kernel32")] private static extern long GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath); private string iniPath; public void SetPath(string iniPath) { this.iniPath = iniPath; } public void IniWriteValue(string section, string key, string value) { WritePrivateProfileString(section, key, value, this.iniPath); } public string IniReadValue(string section, string key) { StringBuilder temp = new StringBuilder(500); GetPrivateProfileString(section, key, "", temp, 500, iniPath); return temp.ToString(); } public bool ExistFile() { return File.Exists(this.iniPath); } } }
注意:
WPF中引入WindowsForms控件的方法為:引用添加System.Windows.Forms.Integration與System.Windows.Forms;
到此這篇關(guān)于C# 利用動態(tài)庫DllImport("kernel32")讀寫ini文件的文章就介紹到這了,更多相關(guān)C# 讀寫ini文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C# Socket連接請求超時(shí)機(jī)制實(shí)現(xiàn)代碼分享
這篇文章主要介紹了C# Socket連接請求超時(shí)機(jī)制實(shí)現(xiàn),下面提供代碼分享,大家可以參考使用2013-12-12c#多線程網(wǎng)絡(luò)聊天程序代碼分享(服務(wù)器端和客戶端)
本程序使用VS2005 制作,程序分為三塊,XuLIeHua類庫下有我寫的把結(jié)構(gòu)序列化的類,還有就是服務(wù)器端和客戶端2013-12-12