65.9K
CodeProject 正在变化。 阅读更多。
Home

CIni

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.94/5 (51投票s)

2003年11月8日

28分钟阅读

viewsIcon

277149

downloadIcon

12455

一个全面的INI文件处理类。

Sample Image - CIni_Demo.gif

目录

引言

虽然推荐程序员使用系统注册表来存储应用程序的初始化数据,但我发现自己仍然经常使用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”方法来获得更多便利,我们都知道CStringArrayTCHAR**方便得多,对吧?

这个类是兼容UNICODE的。

返回 | 目录|

我们能获得什么

CIni是一个Win32 API封装类,专门用于INI文件处理,它不仅提供对基本数据类型的访问,还支持struct,如POINTRECT,甚至用户定义的struct

此外,这个类还实现了我(至少我自己)经常需要的一些方法,例如AppendStringIncreaseIntInvertBoolGetArray等。这些方法通过它们的名称就可以大致理解,但如果你不清楚它们具体做什么,后面会有详细的描述。

这个类还实现了节和键的访问,你可以在一行代码中检查、列出、复制、删除、移动节和键。

返回 | 目录 |

如何使用

要在你的项目中 M>使用CIni类,只需将"Ini.cpp"添加到你的工作区,并在需要的地方包含"Ini.h"即可。

返回 | 目录|

类接口

构造函数

CIni

INI文件路径访问

SetPathName, GetPathName

字符串访问

GetString, WriteString, AppendString, GetArray, WriteArray

整数访问

GetInt, WriteInt, IncreaseInt, GetUInt, WriteUInt, IncreaseUInt

布尔值访问

GetBool, WriteBool, InvertBool

字符访问

GetChar, WriteChar

双精度浮点数访问

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);

ParseDNTString

返回 | 目录 |

方法描述


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_BINARYBASE_OCTALBASE_DECIMALBASE_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_BINARYBASE_OCTALBASE_DECIMALBASE_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_BINARYBASE_OCTALBASE_DECIMALBASE_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_BINARYBASE_OCTALBASE_DECIMALBASE_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_BINARYBASE_OCTALBASE_DECIMALBASE_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_BINARYBASE_OCTALBASE_DECIMALBASE_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日

2003年11月10日

  • 将方法"GetKeys"重命名为"GetKeyLines"。
  • 添加了方法"GetKeyNames"。
  • 为方法"GetArray"添加了参数"bTrimString"。
  • 改进了演示项目,使用户不太可能拼错节/键名。感谢WREY的建议,也感谢Chris Maunder的杀手级控件!;)
  • 更新了 srcdemo 的下载文件。

2003年11月14日

返回 | 目录 |


© . All rights reserved.