CIni






4.94/5 (51投票s)
2003年11月8日
28分钟阅读

277149

12455
一个全面的INI文件处理类。
目录
引言
虽然推荐程序员使用系统注册表来存储应用程序的初始化数据,但我发现自己仍然经常使用INI文件。我不会详细讨论或比较注册表和INI文件的优缺点,但我使用INI文件的一个主要原因是,我认为应用程序应该“感染”系统越少越好,如果能通过INI文件完成,我就不会使用注册表。
返回 | 目录|
INI文件是什么
"INI文件"是存储应用程序初始化(因此得名"ini")数据的文本文件,它们通常体积很小,由"节"、"键"和"值"组成。一个典型的INI文件如下所示:
[Settings]
User=John Smith
Age=25
Family=John Smith,Alice Smith,Tommy,Mike
Has car=1
Has truck=0
[Computer]
IP=69.202.5.38
User=Howard Mark
在上面的示例中,有两个节,分别称为"Settings"和"Computer"。在"Settings"节下,有五个"键值对",即"Key"和"Value"用"="号连接。节"Settings"的第一个键是"User",其值为"John Smith",节"Settings"的第二个键是"Age",其值为"25",依此类推。
在INI文件中,不应该有同名的节,在一个节内也不应该有同名的键。不同节中的键可以具有相同的名称,例如,"Settings"和"Computer"节都有"User"键,但这是可以的,因为它们属于不同的节。
节和键不区分大小写。
返回 | 目录 |
为什么还需要一个类
我知道网上已经有很多INI文件处理类了,那为什么我还要做一个呢?嗯,首先,我认为大多数这类类不像我这个类一样“全面”,它们只提供对字符串、整数、可能还有双精度数的访问,而在这个类中,你会看到巨大的变化。
其次,其他一些类过去会加载整个文件到内存中,然后只访问这个内存副本,如果同时有其他应用程序正在访问同一个INI文件,这就会导致问题,因为如果其他应用程序更改了INI文件的内容,你的应用程序不会知道,因为你只操作自己的副本。我的类使用Win32 API来访问INI文件,所以每一次读写操作都会获得最新的结果。
这个类不需要MFC,但如果你的项目已经链接了MFC,你可以使用这个类提供的一些“仅MFC”方法来获得更多便利,我们都知道CStringArray
比TCHAR**
方便得多,对吧?
这个类是兼容UNICODE的。
返回 | 目录|
我们能获得什么
CIni
是一个Win32 API封装类,专门用于INI文件处理,它不仅提供对基本数据类型的访问,还支持struct
,如POINT
和RECT
,甚至用户定义的struct
。
此外,这个类还实现了我(至少我自己)经常需要的一些方法,例如AppendString
、IncreaseInt
、InvertBool
、GetArray
等。这些方法通过它们的名称就可以大致理解,但如果你不清楚它们具体做什么,后面会有详细的描述。
这个类还实现了节和键的访问,你可以在一行代码中检查、列出、复制、删除、移动节和键。
返回 | 目录 |
如何使用
要在你的项目中 M>使用CIni
类,只需将"Ini.cpp"添加到你的工作区,并在需要的地方包含"Ini.h"即可。
返回 | 目录|
类接口
构造函数
INI文件路径访问
字符串访问
GetString, WriteString, AppendString, GetArray, WriteArray
整数访问
GetInt, WriteInt, IncreaseInt, GetUInt, WriteUInt, IncreaseUInt
布尔值访问
GetBool, WriteBool, InvertBool
字符访问
双精度浮点数访问
GetDouble, WriteDouble, IncreaseDouble
结构体访问
GetPoint, WritePoint, GetRect, WriteRect, GetDataBlock, WriteDataBlock, AppendDataBlock
节操作
IsSectionExist, GetSectionNames, CopySection, MoveSection, DeleteSection
键操作
IsKeyExist, GetKeyLines, GetKeyNames, CopyKey, MoveKey, DeleteKey
双空终止字符串解析
typedef BOOL (CALLBACK *SUBSTRPROC)(LPCTSTR, LPVOID);
返回 | 目录 |
方法描述
CIni::CIni()
CIni::CIni(LPCTSTR lpPathName)
参数
lpPathName
一个空终止的字符串,指定INI文件的路径。
备注
构造一个CIni
对象。
void CIni::SetPathName(LPCTSTR lpPathName)
参数
lpPathName
一个空终止的字符串,指定INI文件的路径。
备注
指定INI文件的路径。
DWORD CIni::GetPathName(LPTSTR lpBuffer, DWORD dwBufSize) const
CString CIni::GetPathName() const
返回值
DWORD
- 指定复制字符串的长度(以TCHAR
为单位),不包括终止的空字符。
CString
- 一个包含该字符串的CString
对象。
参数
lpBuffer
指向要接收复制字符串的缓冲区。如果此参数为
NULL
,返回值将是INI文件路径的实际长度(以TCHAR
为单位)。
dwBufSize
指定要复制到缓冲区的最大字符数。如果字符串比
dwBufSize
指定的字符数长,则会被截断。
备注
检索INI文件的路径。
DWORD CIni::GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dwBufSize, LPCTSTR lpDefault = NULL) const
CString CIni::GetString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpDefault = NULL) const
返回值
DWORD
- 指定复制字符串的长度(以TCHAR
为单位),不包括终止的空字符。
CString
- 一个包含该字符串的CString
对象。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpBuffer
指向要接收复制字符串的缓冲区。如果此参数为
NULL
,返回值将是目标字符串值的实际长度(以TCHAR
为单位)。
dwBufSize
指定要复制到缓冲区的最大字符数。如果字符串比
dwBufSize
指定的字符数长,则会被截断。
lpDefault
一个空终止的字符串,指定如果INI文件中不存在指定的节或键时要检索的默认字符串值。如果此参数为
NULL
,则使用空字符串代替。
备注
从INI文件中检索字符串值。
BOOL CIni::WriteString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpValue) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpValue
要写入INI文件的空终止字符串。
备注
将字符串写入INI文件。如果指定的节或键不存在,则会创建它们。
BOOL CIni::AppendString(LPCTSTR lpSection, LPCTSTR lpKey, LPCTSTR lpString) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpString
要追加到INI文件中现有键值的空终止字符串。
备注
将字符串追加到INI文件中现有的键值。如果指定的节或键不存在,则会创建它们。
DWORD CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, LPTSTR lpBuffer, DWORD dwBufSize, LPCTSTR lpDelimiter = NULL, BOOL bTrimString = TRUE) const
void CIni::GetArray(LPCTSTR lpSection, LPCTSTR lpKey, CStringArray *pArray, LPCTSTR lpDelimiter = NULL, BOOL bTrimString = TRUE) const
返回值
指定复制字符串的长度(以TCHAR
为单位),不包括终止的空字符。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpBuffer
指向要接收复制字符串的缓冲区。如果此参数为
NULL
,返回值将是目标字符串值的实际长度(以TCHAR
为单位)。复制到lpBuffer
的字符串是“双空终止”格式,可以使用 CIni::ParseDNTString 进行解析。
dwBufSize
指定要复制到缓冲区的最大字符数。如果字符串比
dwBufSize
指定的字符数长,则会被截断。
lpDelimiter
一个空终止的字符串,指定用于分隔字符串的分隔符。如果此参数为
NULL
,则使用默认分隔符_T(",")
。如果此参数为空,则字符串不被分隔。
bTrimString
如果此参数非零,则会从每个子字符串中修剪前导和尾随的空格。
pArray
指向一个MFC
CStringArray
,用于接收字符串数组。
备注
从INI文件中检索字符串值,并使用指定的分隔符将其解析为数组。
BOOL CIni::WriteArray(LPCTSTR lpSection, LPCTSTR lpKey, const CStringArray *pArray, int nWriteCount = -1, LPCTSTR lpDelimiter = NULL) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
pArray
指向一个MFC
CStringArray
,其中存储了要写入INI文件的字符串数组。
nWriteCount
指定要写入的最大字符串数量。如果此参数为-1,则会将
*pArray
中存储的所有字符串写入INI文件。
lpDelimiter
一个空终止的字符串,指定将用于分隔字符串的分隔符。如果此参数为
NULL
,则使用默认分隔符_T(",")
。如果此参数为空,则字符串不被分隔。
备注
将字符串数组写入INI文件。如果指定的节或键不存在,则会创建它们。此函数仅在定义了_AFXDLL
时可用。
int CIni::GetInt(LPCTSTR lpSection, LPCTSTR lpKey, int nDefault, int nBase = BASE_DECIMAL) const
返回值
从INI文件中检索的int
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
nDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
nBase
指定用于预处理值的整数基数。此参数可以是
BASE_BINARY
、BASE_OCTAL
、BASE_DECIMAL
或BASE_HEXADECIMAL
。
备注
从INI文件中检索int
值。
BOOL CIni::WriteInt(LPCTSTR lpSection, LPCTSTR lpKey, int nValue, int nBase = BASE_DECIMAL) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
nValue
要写入INI文件的
int
值。
nBase
指定用于预处理值的整数基数。此参数可以是
BASE_BINARY
、BASE_OCTAL
、BASE_DECIMAL
或BASE_HEXADECIMAL
。
备注
将int
值写入INI文件。如果指定的节或键不存在,则会创建它们。
BOOL CIni::IncreaseInt(LPCTSTR lpSection, LPCTSTR lpKey, int nIncreaseBy = 1, int nBase = BASE_DECIMAL) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
nIncreaseBy
要增加的
int
值。
nBase
指定用于预处理值的整数基数。此参数可以是
BASE_BINARY
、BASE_OCTAL
、BASE_DECIMAL
或BASE_HEXADECIMAL
。
备注
从INI文件中检索int
值,将其增加nIncreaseBy
,然后将结果int
值写回INI文件。如果指定的节或键不存在,则会创建它们。
UINT CIni::GetUInt(LPCTSTR lpSection, LPCTSTR lpKey, UINT nDefault, int nBase = BASE_DECIMAL) const
返回值
从INI文件中检索的UINT
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
nDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
nBase
指定用于预处理值的整数基数。此参数可以是
BASE_BINARY
、BASE_OCTAL
、BASE_DECIMAL
或BASE_HEXADECIMAL
。
备注
从INI文件中检索UINT
值。
BOOL CIni::WriteUInt(LPCTSTR lpSection, LPCTSTR lpKey, UINT nValue, int nBase = BASE_DECIMAL) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
nValue
要写入INI文件的
UINT
值。
nBase
指定用于预处理值的整数基数。此参数可以是
BASE_BINARY
、BASE_OCTAL
、BASE_DECIMAL
或BASE_HEXADECIMAL
。
备注
将UINT
值写入INI文件。如果指定的节或键不存在,则会创建它们。
BOOL CIni::IncreaseUInt(LPCTSTR lpSection, LPCTSTR lpKey, UINT nIncreaseBy = 1, int nBase = BASE_DECIMAL) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
nIncreaseBy
要增加的
UINT
值。
nBase
指定用于预处理值的整数基数。此参数可以是
BASE_BINARY
、BASE_OCTAL
、BASE_DECIMAL
或BASE_HEXADECIMAL
。
备注
从INI文件中检索UINT
值,将其增加nIncreaseBy
,然后将结果UINT
值写回INI文件。如果指定的节或键不存在,则会创建它们。
BOOL CIni::GetBool(LPCTSTR lpSection, LPCTSTR lpKey, BOOL bDefault) const
返回值
从INI文件中检索的BOOL
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
bDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
备注
从INI文件中检索BOOL
值。
BOOL CIni::WriteBool(LPCTSTR lpSection, LPCTSTR lpKey, BOOL bValue) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
bValue
要写入INI文件的
BOOL
值。
备注
将BOOL
值写入INI文件。如果指定的节或键不存在,则会创建它们。
BOOL CIni::InvertBool(LPCTSTR lpSection, LPCTSTR lpKey) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
备注
从INI文件中检索BOOL
值,对其进行反转,然后将反转后的BOOL
值写回INI文件。如果指定的节或键不存在,则会创建它们。
TCHAR CIni::GetChar(LPCTSTR lpSection, LPCTSTR lpKey, TCHAR cDefault) const
返回值
从INI文件中检索的TCHAR
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
cDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
备注
从INI文件中检索TCHAR
值。
BOOL CIni::WriteChar(LPCTSTR lpSection, LPCTSTR lpKey, TCHAR cValue) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
cValue
要写入INI文件的
TCHAR
值。
备注
将TCHAR
值写入INI文件。如果指定的节或键不存在,则会创建它们。
double CIni::GetDouble(LPCTSTR lpSection, LPCTSTR lpKey, double fDefault) const
返回值
从INI文件中检索的double
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
fDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
备注
从INI文件中检索double
值。
BOOL CIni::WriteDouble(LPCTSTR lpSection, LPCTSTR lpKey, double fValue, int nPrecision = -1) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
fValue
要写入INI文件的
double
值。
nPrecision
指定将双精度值写入INI文件时使用的精度。如果此参数小于0,则精度由系统自动确定。
备注
将double
值写入INI文件。如果指定的节或键不存在,则会创建它们。
BOOL CIni::IncreaseDouble(LPCTSTR lpSection, LPCTSTR lpKey, double fIncreaseBy, int nPrecision = -1) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
fIncreaseBy
要增加的
double
值。
nPrecision
指定将双精度值写入INI文件时使用的精度。如果此参数小于0,则精度由系统自动确定。
备注
从INI文件中检索double
值,将其增加fIncreaseBy
,然后将结果double
值写回INI文件。如果指定的节或键不存在,则会创建它们。
POINT CIni::GetPoint(LPCTSTR lpSection, LPCTSTR lpKey, POINT ptDefault) const
返回值
从INI文件中检索的POINT
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
ptDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
备注
从INI文件中检索POINT
值。
BOOL CIni::WritePoint(LPCTSTR lpSection, LPCTSTR lpKey, POINT pt) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
pt
要写入INI文件的
POINT
值。
备注
将POINT
值写入INI文件。如果指定的节或键不存在,则会创建它们。
RECT CIni::GetRect(LPCTSTR lpSection, LPCTSTR lpKey, RECT rcDefault) const
返回值
从INI文件中检索的RECT
值。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
rcDefault
指定如果INI文件中不存在指定的节或键时要检索的默认值。
备注
从INI文件中检索RECT
值。
BOOL CIni::WriteRect(LPCTSTR lpSection, LPCTSTR lpKey, RECT rc) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
rc
要写入INI文件的
RECT
值。
备注
将RECT
值写入INI文件。如果指定的节或键不存在,则会创建它们。
DWORD CIni::GetDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPVOID lpBuffer, DWORD dwBufSize, DWORD dwOffset = 0) const
返回值
指定复制数据块的长度(以字节为单位)。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpBuffer
指向要接收复制数据的缓冲区。如果此参数为
NULL
,返回值将是目标数据的实际长度(以字节为单位)。
dwDataSize
指定
lpbuffer
参数指向的缓冲区的大小(以字节为单位)。
dwOffset
指定从源数据开始读取的偏移量。
备注
从INI文件中检索数据块。
示例
// To retrieve 5 RECT's from the ini file CIni ini(_T("c:\\test.ini")); RECT data[5]; DWORD dwCopied = ini.GetDataBlock(_T("sect1"), _T("rect array"), (LPVOID)data, sizeof(RECT) * 5);
BOOL CIni::WriteDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPCVOID lpData, DWORD dwDataSize) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpData
指向包含要写入INI文件的数据的缓冲区。如果此参数为
NULL
,函数将失败。
dwDataSize
指定
lpData
参数指向的缓冲区的大小(以字节为单位)。
备注
将数据块写入INI文件。如果指定的节或键不存在,则会创建它们。
示例
// To write 3 int's to the ini file CIni ini(_T("c:\\test.ini")); int data[3] = { 202, -126, 6500 }; // Just a sample DWORD dwCopied = ini.WriteDataBlock(_T("sect1"), _T("int array"), (LPCVOID)data, sizeof(int) * 3);
BOOL CIni::AppendDataBlock(LPCTSTR lpSection, LPCTSTR lpKey, LPCVOID lpData, DWORD dwDataSize) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
lpData
指向包含要追加到INI文件的数据的缓冲区。如果此参数为
NULL
,函数将失败。
dwDataSize
指定
lpData
参数指向的缓冲区的大小(以字节为单位)。
备注
将数据块追加到INI文件中的指定键。如果指定的节或键不存在,则会创建它们。
BOOL CIni::IsSectionExist(LPCTSTR lpSection) const
返回值
如果INI文件中存在lpSection
指定的节,则返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
备注
检查指定的节是否存在于INI文件中。
DWORD CIni::GetSectionNames(LPTSTR lpBuffer, DWORD dwBufSize) const
void CIni::GetSectionNames(CStringArray *pArray) const
返回值
指定复制字符串的长度(以TCHAR
为单位),不包括终止的空字符。
参数
lpBuffer
指向要接收复制的节名称列表的缓冲区。如果此参数为
NULL
,返回值将是节名称列表的实际长度(以TCHAR
为单位)。复制到lpBuffer
的字符串是“双空终止”格式,可以使用 CIni::ParseDNTString 进行解析。
dwBufSize
指定要复制到缓冲区的最大字符数。如果字符串比
dwBufSize
指定的字符数长,则会被截断。
pArray
指向一个MFC
CStringArray
对象,用于接收节名称列表。
备注
从INI文件中检索节名称列表。
BOOL CIni::CopySection(LPCTSTR lpSrcSection, LPCTSTR lpDestSection, BOOL bFailIfExist) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSrcSection
一个空终止的字符串,指定INI文件中的源节名称。
lpDestSection
一个空终止的字符串,指定INI文件中的目标节名称。
bFailIfExist
如果目标节已存在,则当此参数为零时,目标节将被源节替换,否则函数失败。
备注
将整个节(包括所有键)复制到另一个节。如果目标节不存在,则会创建它。
BOOL CIni::MoveSection(LPCTSTR lpSrcSection, LPCTSTR lpDestSection, BOOL bFailIfExist = TRUE) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSrcSection
一个空终止的字符串,指定INI文件中的源节名称。
lpDestSection
一个空终止的字符串,指定INI文件中的目标节名称。
bFailIfExist
如果目标节已存在,则当此参数为零时,目标节将被源节替换,否则函数失败。
备注
将整个节(包括所有键)移动到另一个节。如果目标节不存在,则会创建它。
BOOL CIni::DeleteSection(LPCTSTR lpSection) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
备注
从INI文件中删除整个节(包括所有键)。
BOOL CIni::IsKeyExist(LPCTSTR lpSection, LPCTSTR lpKey) const
返回值
如果INI文件中由lpSection
指定的节中存在lpKey
指定的键,则返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
备注
检查指定的键是否存在于INI文件中指定的节中。
DWORD CIni::GetKeyLines(LPCTSTR lpSection, LPTSTR lpBuffer, DWORD dwBufSize) const
void CIni::GetKeyLines(LPCTSTR lpSection, CStringArray *pArray) const
返回值
指定复制字符串的长度(以TCHAR
为单位),不包括终止的空字符。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpBuffer
指向要接收复制的键行列表的缓冲区。如果此参数为
NULL
,返回值将是键行列表的实际长度(以TCHAR
为单位)。复制到lpBuffer
的字符串是“双空终止”格式,可以使用 CIni::ParseDNTString 进行解析。
dwBufSize
指定要复制到缓冲区的最大字符数。如果字符串比
dwBufSize
指定的字符数长,则会被截断。
pArray
指向一个MFC
CStringArray
对象,用于接收键行列表。
备注
从INI文件中检索指定节中的键行列表。键行是包含键名、键值(可选)和等号(可选)的字符串。
DWORD CIni::GetKeyNames(LPCTSTR lpSection, LPTSTR lpBuffer, DWORD dwBufSize) const
void CIni::GetKeyNames(LPCTSTR lpSection, CStringArray *pArray) const
返回值
指定复制字符串的长度(以TCHAR
为单位),不包括终止的空字符。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpBuffer
指向要接收复制的键名列表的缓冲区。如果此参数为
NULL
,返回值将是键名列表的实际长度(以TCHAR
为单位)。复制到lpBuffer
的字符串是“双空终止”格式,可以使用 CIni::ParseDNTString 进行解析。
dwBufSize
指定要复制到缓冲区的最大字符数。如果字符串比
dwBufSize
指定的字符数长,则会被截断。
pArray
指向一个MFC
CStringArray
对象,用于接收键名列表。
备注
从INI文件中检索指定节中的键名列表。
BOOL CIni::CopyKey(LPCTSTR lpSrcSection, LPCTSTR lpSrcKey, LPCTSTR lpDestSection, LPCTSTR lpDestKey, BOOL bFailIfExist) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSrcSection
一个空终止的字符串,指定INI文件中的源节名称。
lpSrcKey
一个空终止的字符串,指定INI文件中由
lpSrcSection
指定的节中的源键名。
lpDestSection
一个空终止的字符串,指定INI文件中的目标节名称。
lpDestKey
一个空终止的字符串,指定INI文件中由
lpDestSection
指定的节中的目标键名。
bFailIfExist
如果目标节中已存在目标键,则当此参数为零时,目标键将被源键替换,否则函数失败。
备注
将指定键复制到另一个键。复制可以是跨节的。如果目标节或键不存在,则会创建它们。
BOOL CIni::MoveKey(LPCTSTR lpSrcSection, LPCTSTR lpSrcKey, LPCTSTR lpDestSection, LPCTSTR lpDestKey, BOOL bFailIfExist = TRUE) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSrcSection
一个空终止的字符串,指定INI文件中的源节名称。
lpSrcKey
一个空终止的字符串,指定INI文件中由
lpSrcSection
指定的节中的源键名。
lpDestSection
一个空终止的字符串,指定INI文件中的目标节名称。
lpDestKey
一个空终止的字符串,指定INI文件中由
lpDestSection
指定的节中的目标键名。
bFailIfExist
如果目标节中已存在目标键,则当此参数为零时,目标键将被源键替换,否则函数失败。
备注
将指定键移动到另一个键。移动可以是跨节的。如果目标节或键不存在,则会创建它们。
BOOL CIni::DeleteKey(LPCTSTR lpSection, LPCTSTR lpKey) const
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpSection
一个空终止的字符串,指定INI文件中的节名称。
lpKey
一个空终止的字符串,指定INI文件中由
lpSection
指定的节中的键名。
备注
从指定节中删除指定的键。
typedef BOOL (CALLBACK *SUBSTRPROC)(LPCTSTR, LPVOID);
备注
用户定义的CALLBACK
函数的类型定义,它将处理从“双空终止”字符串解析出的子字符串。
调用时,传递的第一个参数将存储新提取的子字符串,第二个参数是32位用户定义数据,此参数可以为NULL
。如果此函数返回零,则解析将终止。要使用回调函数,需要将函数指针传递给 CIni::ParseDNTString。
static BOOL CIni::ParseDNTString(LPCTSTR lpString, SUBSTRPROC lpFnStrProc, LPVOID lpParam = NULL)
返回值
如果成功,函数返回非零值,否则返回零。
参数
lpString
一个空终止的字符串,指定要解析的“双空终止”字符串。
lpFnStrProc
指向 SUBSTRPROC
CALLBACK
函数的指针,该函数将处理从lpString
解析出的子字符串。
lpParam
将传递给
lpFnStrProc
的用户定义数据。此参数可以为NULL
。
备注
解析“双空终止”字符串。每次成功从lpString
指定的“双空终止”字符串中提取一个子字符串后,都会调用lpFnStrProc
指向的回调函数,并将子字符串传递进去。如果回调函数返回非零值,则继续解析,直到从lpString
中提取完所有子字符串,或者回调函数的下一次调用返回零。
历史
2003年11月8日
- 首次公开发布。
2003年11月9日
- 修复了"GetString"和"GetPathName"方法,将参数从"
LPSTR
"更改为"LPTSTR
"。 - 为"SUBSTRPROC"和"ParseDNTString"添加了详细描述。
- 更新了 src 和 demo 的下载文件。
2003年11月10日
- 将方法"
GetKeys
"重命名为"GetKeyLines"。 - 添加了方法"GetKeyNames"。
- 为方法"GetArray"添加了参数"
bTrimString
"。 - 改进了演示项目,使用户不太可能拼错节/键名。感谢WREY的建议,也感谢Chris Maunder的杀手级控件!;)
- 更新了 src 和 demo 的下载文件。
2003年11月14日
- 使用
__AFXWIN_H__
代替_AFXDLL
来判断MFC是否存在。 - 移除了INI文件路径名称的字符串长度限制。
- 移除了"
GetStruct
"和"WriteStruct
"。 - 添加了"GetDataBlock"、"WriteDataBlock"和"AppendDataBlock"。
- 添加了"GetChar"和"WriteChar"。
- 更新了 src 和 demo 的下载文件。
返回 | 目录 |