我的程序中有一些自定义的控件,每个控件对应相应的ini文件,在ini文件中存储该控件的基本属性和默认值。
我的想法是这样,在程序开始时,一次读入所有的ini文件,存到一个结构中,具体的ini如下:[PROPERTY]
PROPERTY_COUNT=2[PROPERTY_0]
ITEM_NAME=PROPERTY_TYPE,PROPERTY_TITLE,Operation_1,Operation_2
PROPERTY_TYPE=COMBOBOX
PROPERTY_TITLE=Wnd Style
Operation_1=GFX_WND_NO_TITLE_STYLE
Operation_2=GFX_WND_TITLE_TXT_STYLE
[PROPERTY_1]
ITEM_NAME=PROPERTY_TYPE,PROPERTY_TITLE,LINE_1,LINE_2
PROPERTY_TYPE=LIST
PROPERTY_TITLE=Wnd Style
LINE_1=GFX_WND_NO_TITLE_STYLE,0,text
LINE_2=GFX_WND_NO_TITLE_STYLE,1,text
LINE_3=GFX_WND_TITLE_TXT_STYLE,root,long每一项都存为String,但是具体的ini文件个数不定,而且如上所示一个ini文件中的每个属性的项长度也不定,请问有什么好的设计,我这样读到内存结构中,以后调用就不用再读文件了,比较快点。我想可能是这样吧:以ini文件作为节点,内部的item再以链表存储?请大侠指点迷津,谢谢!
我的想法是这样,在程序开始时,一次读入所有的ini文件,存到一个结构中,具体的ini如下:[PROPERTY]
PROPERTY_COUNT=2[PROPERTY_0]
ITEM_NAME=PROPERTY_TYPE,PROPERTY_TITLE,Operation_1,Operation_2
PROPERTY_TYPE=COMBOBOX
PROPERTY_TITLE=Wnd Style
Operation_1=GFX_WND_NO_TITLE_STYLE
Operation_2=GFX_WND_TITLE_TXT_STYLE
[PROPERTY_1]
ITEM_NAME=PROPERTY_TYPE,PROPERTY_TITLE,LINE_1,LINE_2
PROPERTY_TYPE=LIST
PROPERTY_TITLE=Wnd Style
LINE_1=GFX_WND_NO_TITLE_STYLE,0,text
LINE_2=GFX_WND_NO_TITLE_STYLE,1,text
LINE_3=GFX_WND_TITLE_TXT_STYLE,root,long每一项都存为String,但是具体的ini文件个数不定,而且如上所示一个ini文件中的每个属性的项长度也不定,请问有什么好的设计,我这样读到内存结构中,以后调用就不用再读文件了,比较快点。我想可能是这样吧:以ini文件作为节点,内部的item再以链表存储?请大侠指点迷津,谢谢!
{
public:
CString m_Name;
CString m_Value;
}class CProperty
{
public:
CList<CItem> m_Items;
}class MyIni
{
public:
CList<CProperty> m_Property;
}这似乎有点太简单了,但是,从你的问题看来,似乎没看到还有什么需要优化的地方,简单写一点,继续讨论吧!
你可以对每一个字段的长度也进行ini存储。
比如对PROPERTY_0字段
可以存储字段数为5
[PROPERTY_0Count]
nCount=5
每次先读字段数,然后再进行循环读出即可
{
CString strKey;
CString strVal;
}struct section
{
CString strSection;
CPtrArray arrKeys; // 存key结构指针的数组
}在类中定义
private:
CPtrArray m_arrSections;然后比如
DWORD GetPrivateProfileString(
LPCSTR lpAppName,
LPCSTR lpKeyName,
LPCSTR lpDefault,
LPSTR lpReturnedString,
DWORD nSize,
LPCSTR lpFileName)
{
查找。section,找到后查找key,找到后拷贝值
}
typedef _yourProperty
{
CString strName;
CString strType;
.............
} ControlPro;#include <map>定义映射:
std::map<CString ,ControlPro> m_ctlProperties;
读入的时候
m_ctlProperties[控件名]=控件属性结构体;
使用某个控件的时候:
m_ctlProperties[控件名].strName;