1 ini文件讀寫
kernel32.dll是windows中非常重要的32位動(dòng)態(tài)鏈接庫(kù)文件,屬于內(nèi)核級(jí)文件。它控制著系統(tǒng)的內(nèi)存管理、數(shù)據(jù)的輸入輸出操作和中斷處理,當(dāng)windows啟動(dòng)時(shí),kernel32.dll就駐留在內(nèi)存中特定的寫保護(hù)區(qū)域,使別的程序無(wú)法占用這個(gè)內(nèi)存區(qū)域。
為什么要來(lái)討論讀寫ini文件呢,難道有數(shù)據(jù)庫(kù)我們就不用讀寫文件了嗎,什么數(shù)據(jù)都從數(shù)據(jù)庫(kù)讀取出來(lái)嗎,有些東西是根據(jù)客戶的習(xí)慣,就沒必要去讀取數(shù)據(jù)庫(kù)了,或者說(shuō),比如你要做一個(gè)記住密碼的功能,如果在web端,你還可以用cookie這東西,但是要是winform呢,這時(shí)候ini文件就可以派上用場(chǎng)了。我們可以把用戶和密碼存在ini文件里。
注意事項(xiàng):
- ini文件路徑必須完整
- 可將ini放在程序所在目錄,此時(shí)ipfilename參數(shù)為“.\filename.ini”
2 方法
(1)getprivateprofileint :使用該方法可獲取ini類型數(shù)據(jù),未獲取到時(shí)則會(huì)取設(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í)則會(huì)取設(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對(duì)象,指定一個(gè)字符串緩沖區(qū),長(zhǎng)度至少為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 { /// /// mainwindow.xaml 的交互邏輯 /// 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;