一個手工讀寫INI文件的類(一)

Windows中有GetPrivateProfileString WritePrivateProfileString函數可以進行讀寫INI配置文件,但這兩個函數每取出一個數據,都要打開文件,在文件中進行搜索,這樣處理的效率肯定會很慢,因此下面提供了一個將配置文件讀入內存中的做法,這樣做的好處是一次讀取文件,快速搜索(使用Map映射)。可以將所有數據全部保存成字符串或者文件。

INI配置文件主要由四部分組成:組、鍵值、內容、註釋和空行,下面給出一個例子文件進行說明

文件:E:/boot.ini

 <?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

[boot loader]   ;這裏是一個組,下面的兩行配置數據隸屬於該組

timeout=1       ;這裏在等號前面的是一個鍵值,等號後面的是一個內容

default=multi(0)disk(0)rdisk(0)partition(2)/WINNT;下面一行是一個空行

 

[operating systems];所有在';'後面的字符都屬於註釋,本程序不支持REM形式的註釋

multi(0)disk(0)rdisk(0)partition(2)/WINNT="Microsoft Windows 2000 Professional" /fastdetect;sadfkl;

C:/="Microsoft Windows"

 

       好了,知道了INI文件的結構,開始分析INI文件讀入內存後應使用的數據結構。

       一個INI文件可以看作是由一些組以及每個組下面的數據組成的,組是字符串形式的,而數據是一個比較複雜的對象。爲了搜索的方便,所以這裏採用了CMapStringToPtr來組織整個INI文件,這樣的話可以由組的字符串方便地查詢到該組中的數據

         一個組下面的數據是由一些鍵值—à內容組成的映射關係,所以使用CMapStringToString來組這這些數據是最好不過的選擇了。

 

         下面給出這個類的頭文件和實現部分。給出之前簡單介紹該類的用法:

讀取上述E:/boot.ini文件:

 

 

#include "cfgdata.h"

 

         CCfgData CfgData;

 

         //Load INI文件

         CfgData.LoadCfgData("E://boot.ini");

         CString str;

         long l=0;

         //設置當前組

         CfgData.SetGroup("boot loader");

         //讀取long型數據到變量l

         CfgData.GetLongData("timeout",l);

         //讀取字符串型數據到變量str

         CfgData.GetStrData("default",str);

         //設置當前組

         CfgData.SetGroup("operating systems");

         //讀取字符串型數據到變量str

         CfgData.GetStrData("multi(0)disk(0)rdisk(0)partition(2)//WINNT",str);

         //讀取字符串型數據到變量str

         CfgData.GetStrData("C://",str);

         //將整個配置數據保存進入字符串中

         CfgData.SaveToStr(&str);

         //將整個配置數據保存進入文件中,注意配置數據相互之間沒有順序關係,

         //所以可能組和組之間、一個組的幾個鍵值--->內容配對之間的順序將會

         //和以前不一致,另外所有的註釋和空行丟失

         CfgData.SaveCfgData("E://boot2.ini");
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章