GetPrivateProfileString 函数 (winbase.h)
从初始化文件中的指定节检索字符串。
语法
DWORD GetPrivateProfileString(
[in] LPCTSTR lpAppName,
[in] LPCTSTR lpKeyName,
[in] LPCTSTR lpDefault,
[out] LPTSTR lpReturnedString,
[in] DWORD nSize,
[in] LPCTSTR lpFileName
);
参数
[in] lpAppName
包含键名称的节的名称。 如果此参数为 NULL, 则 GetPrivateProfileString 函数会将文件中的所有节名称复制到提供的缓冲区。
[in] lpKeyName
要检索其关联字符串的键的名称。 如果此参数为 NULL,则 lpAppName 参数指定的节中的所有键名称将复制到 lpReturnedString 参数指定的缓冲区。
[in] lpDefault
默认字符串。 如果在初始化文件中找不到 lpKeyName 键, GetPrivateProfileString 会将默认字符串复制到 lpReturnedString 缓冲区。
如果此参数为 NULL,则默认值为空字符串“”。
避免指定带有尾随空白字符的默认字符串。 函数在 lpReturnedString 缓冲区中插入一个 null 字符,以去除任何尾随空白。
[out] lpReturnedString
指向接收检索到的字符串的缓冲区的指针。
[in] nSize
lpReturnedString 参数指向的缓冲区的大小(以字符为单位)。
[in] lpFileName
初始化文件的名称。 如果此参数不包含文件的完整路径,系统会在 Windows 目录中搜索该文件。
返回值
返回值是复制到缓冲区的字符数,不包括终止 null 字符。
如果 lpAppName 和 lpKeyName 都不为 NULL ,并且提供的目标缓冲区太小而无法容纳请求的字符串,则会截断字符串并后跟 一个 null 字符,并且返回值等于 nSize 减 1。
如果 lpAppName 或 lpKeyName 为 NULL ,并且提供的目标缓冲区太小,无法容纳所有字符串,则最后一个字符串将被截断,后跟两个 null 字符。 在本例中,返回值等于 nSize 减 2。
如果找不到 lpFileName 指定的初始化文件或包含无效值,则调用 GetLastError 将返回“0x2” (找不到文件) 。 若要检索扩展的错误信息,请调用 GetLastError。
注解
GetPrivateProfileString 函数在指定的初始化文件中搜索与 lpAppName 参数指定的节标题下 lpKeyName 参数指定的名称匹配的键。 如果找到密钥,函数会将相应的字符串复制到缓冲区。 如果该键不存在,函数将复制 lpDefault 参数指定的默认字符串。 初始化文件中的节必须具有以下形式:
[section]
key=string
.
.
.
如果 lpAppName 为 NULL, 则 GetPrivateProfileString 会将指定文件中的所有节名称复制到提供的缓冲区。 如果 lpKeyName 为 NULL,则该函数会将指定节中的所有键名称复制到提供的缓冲区。 应用程序可以使用此方法枚举文件中的所有节和键。 在任一情况下,每个字符串后跟 一个 null 字符,最后一个字符串后跟第二个 null 字符。 如果提供的目标缓冲区太小,无法容纳所有字符串,则最后一个字符串将被截断,后跟两个 null 字符。
如果与 lpKeyName 关联的字符串用单引号或双引号引起来,则 当 GetPrivateProfileString 函数检索字符串时,标记将被丢弃。
GetPrivateProfileString 函数不区分大小写;字符串可以是大写字母和小写字母的组合。
若要从 Win.ini 文件检索字符串,请使用 GetProfileString 函数。
系统使用以下注册表项下定义的映射将大多数 .ini 文件引用映射到注册表:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping
如果应用程序修改 Control.ini、System.ini 和 Winfile.ini 等系统组件初始化文件,则此映射很可能。 在这些情况下,函数从注册表检索信息,而不是从初始化文件中检索信息;存储位置中的更改不会影响函数的行为。
配置文件函数使用以下步骤来查找初始化信息:
- 在注册表中查找 IniFileMapping 键下的初始化文件的名称。
- 查找 lpAppName 指定的节名称。 这将是具有初始化文件名称的键下的命名值,或者具有此名称的子项,或者名称将不作为值或子项存在。
- 如果 lpAppName 指定的节名称是命名值,则该值指定在注册表中查找该节的键的位置。
- 如果 lpAppName 指定的节名称是一个子项,则该子项下的命名值将指定在注册表中查找该节的键的位置。 如果要查找的项不存在为命名值,则 (未命名的值显示为 <“无名称>) ”,指定在注册表中查找密钥的默认位置。
- 如果 lpAppName 指定的节名称不是作为命名值或子项存在的,则存在一个未命名的值 (显示为 <“无名称> ”) ,指定注册表中的默认位置,可在其中找到分区的键。
- 如果节名称没有子项或条目,请在磁盘上查找实际的初始化文件并读取其内容。
- ! - 此字符强制所有写入操作同时转到注册表和磁盘上的 .ini 文件。
- # - 当新用户在安装后首次登录时,此字符会导致注册表值设置为 Windows 3.1 .ini 文件中的值。
- @ - 如果注册表中找不到请求的数据,此字符将阻止任何读取操作转到磁盘上的 .ini 文件。
- USR: - 此前缀代表 HKEY_CURRENT_USER,前缀后面的文本相对于该键。
- SYS: - 此前缀代表 HKEY_LOCAL_MACHINE\SOFTWARE,前缀后面的文本相对于该键。
示例
以下示例演示如何使用 GetPrivateProfileString。
// Gets a profile string called "Preferred line" and converts it to an int.
GetPrivateProfileString (
"Preference",
"Preferred Line",
gszNULL,
szBuffer,
MAXBUFSIZE,
gszINIfilename
);
// if szBuffer is not empty.
if ( lstrcmp ( gszNULL, szBuffer ) )
{
dwPreferredPLID = (DWORD) atoi( szBuffer );
}
else
{
dwPreferredPLID = (DWORD) -1;
}
要求
要求 | 值 |
---|---|
最低受支持的客户端 | Windows 2000 Professional [仅限桌面应用] |
最低受支持的服务器 | Windows 2000 Server [仅限桌面应用] |
目标平台 | Windows |
标头 | winbase.h (包括 Windows.h) |
Library | Kernel32.lib |
DLL | Kernel32.dll |