文章出處:
前些天見有個網友問怎麼用api來實現對ini檔案的讀寫,這個問題我也早就想實現一下,可一直沒有做,現在終於又多了乙個理由來研究它了
用api寫ini檔案的函式有
bool writeprivateprofilestring(
lpctstr lpkeyname, // 鍵名
lpctstr lpstring, // 新增的字串
lpctstr lpfilename // ini檔名 );
bool writeprivateprofilestruct(
lpctstr lpszsection, // pointer to section name
lpctstr lpszkey, // pointer to key name
lpvoid lpstruct, // 要寫入的資料緩衝區
uint usizestruct, // 緩衝區的大小
lpctstr szfile // pointer to initialization filename );
bool writeprivateprofilesection(
lpctstr lpstring, // 寫入的字串
lpctstr lpfilename // pointer to string with filename );
用api讀ini檔案的函式有
dword getprivateprofilestring(
lpctstr lpkeyname, // points to key name
lpctstr lpdefault, // 預設字串 ,如果沒有則返回該值
lptstr lpreturnedstring, // 返回的字串
dword nsize, // 返回字串的大小
lpctstr lpfilename // points to initialization filename );
dword getprivateprofilesection(
lptstr lpreturnedstring, // address of return buffer
dword nsize, // size of return buffer
lpctstr lpfilename // address of initialization filename );
uint getprivateprofileint(
lpctstr lpkeyname, // address of key name
int ndefault, // return value if key name is not found
lpctstr lpfilename // address of initialization filename
); bool getprivateprofilestruct(
lpctstr lpszsection, // address of section name
lpctstr lpszkey, // address of key name
lpvoid lpstruct, // address of return buffer
uint usizestruct, // size of return buffer
lpctstr szfile // address of initialization filename );
dword getprivateprofilesectionnames(
lptstr lpszreturnbuffer, // address of return buffer
dword nsize, // size of return buffer
lpctstr lpfilename // address of initialization filename );
當然還有如writeprofilestring,writeprofilesection,writeprofilesturct, getprofilestring,getprofilestruct,getprofilesectionnames,getprofileint,getprofilesection但這些只對win.ini有效
下面我們來學習它們的用法
writeprivateprofilestring函式是向ini檔案中寫入字串,如
writeprivateprofilestring(pchar('型別'),pchar('api'),pchar('api 真好!'),pchar('c:\example.ini'));
如果第二個引數是nil,那麼該操作將刪除該節
如果第三個引數為nil,那麼該操作將刪除該節中的所有鍵
如果在指定的檔案中沒有路徑,那麼它將在系統的目錄尋找檔案,如果不存在則建立
writeprivateprofilesection是向檔案中寫入一整個鍵,其它鍵的格式為key = value,如
writeprivateprofilesection(pchar('型別'),pchar('其它=123'),pchar('c:\example.ini'));
注意,該操作將刪除該節中的所有鍵後在進行本次的寫入
writeprivateprofilestruct是向檔案中寫入乙個結構,如
type
tperson = record
name:string;
age:integer;
end;
varper:tperson;
writeprivateprofilestruct(pchar('型別'),pchar('結構'),@per,sizeof(per),pchar('c:\example.ini'));
getprivateprofilestring是從檔案中讀出乙個指定鍵的字串,如果沒有找到,則返回預設值
getprivateprofilestring(pchar(『型別'),pchar('api'),pchar('no value'),str1,21,pchar('c:\example.ini'));
getprivateprofilesection是從檔案中讀出一整個鍵
getprivateprofilesection('型別',str1,200,'c:\example.ini');
getprivateprofileint是從檔案中讀出指定鍵的整型值,如果沒找到或不是整型的值,則返回預設值,如果返回值小於0,則返回0,如
i:=getprivateprofileint(pchar('型別'),pchar('整型'),i,pchar('c:\example.ini'));
showmessage(inttostr(i));
getprivateprofilestruct從檔案中讀出指定鍵的結構值,如
type
tperson = record
name:string;
age:integer;
end;
varbuffer:tperson;
getprivateprofilestruct(pchar('型別'),pchar('結構'),@buffer,sizeof(per),pchar('c:\example.ini'));
getprivateprofilesectionnames是從檔案中讀出所有節的名稱,該函式返回讀入緩衝區的字元數,如
count:=getprivateprofilesectionnames(str3,200,pchar('c:\example.ini'));
showmessage(str3);
此處顯示的只是第乙個節的名稱,如果要顯示第二個字元的名稱則要用到下面這句
showmessage(str3+5);
這句不用多解釋吧?
以上就是這些函式的用法。你可能要問「怎麼只有寫字串的呀,怎麼沒有寫其它的型別的呢?」,問的好,不過其它型別的用writeprivateprofilestring都能代替,如要寫浮點型的就把該型別的放到』』當中,如』12.5』。那位學友又問了,「如果是讓使用者輸入,他們也不知道應該輸入什麼,怎麼能限制他們輸入的都是數字」,這方法可太多了,如用控制項或檢查它們是不是在指定的數字,你可別說不會限制它們是不是數字呀*_^,如果真的不會,你就看它們的ascii碼是不是在48-57之間就行了。「那讀出呢?」,delphi不是有strtoint,strtofloat,strtocurr等這麼函式嘛,可以用它們來轉換。
我在研究這些函式的同時,發現了一段有趣程式**,但我不知道它為什麼要這樣做,有什麼好處,大家可以看看它們,不過是用c寫的,它們在delphi sdk或msdn中查詢writeprivateprofilestring函式,在最下面的那個段**就是
configparser讀寫ini配置檔案
讀取配置檔案 寫入配置檔案 判斷某元素是否存在 has option has section 要讀寫的ini檔案 sec a a key1 20 a key2 10 sec b b key1 121 b key2 b value2 b key3 r b key4 127.0.0.1 import c...
INI檔案讀寫
一 有必要了解ini檔案的結構 注釋 小節名 關鍵字 值 ini檔案允許有多個小節,每個小節又允許有多個關鍵字,後面是該關鍵字的值。值的型別有三種 字串 整型數值和布林值。其中字串存貯在ini檔案中時沒有引號,布林真值用1表示,布林假值用0表示。注釋以分號 開頭。二 定義 1 在inte ce的us...
讀寫ini檔案
using system using system.io using system.text using system.configuration using system.runtime.interopservices using system.collections.specialized us...