读:
BOOL GetPrivateProfileStruct(
LPCTSTR lpszSection,
LPCTSTR lpszKey,
LPVOID lpStruct,
UINT uSizeStruct,
LPCTSTR szFile
);
DWORD GetPrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpDefault,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
);
检索初始化文件指定部分的所有键和值。
DWORD GetPrivateProfileSection(
LPCTSTR lpAppName,
LPTSTR lpReturnedString,
DWORD nSize,
LPCTSTR lpFileName
);
把信息写入系统的win.ini文件
BOOL WriteProfileString(
LPCTSTR lpAppName, // 节的名字
LPCTSTR lpKeyName, // 键的名字,是一个以0结束的字符串。若为NULL,则删除整个节
LPCTSTR lpString // 键的值,是一个以0结束的字符串。若为NULL,则删除对应的键
)
检索Win.ini文件的指定部分的所有键和值。
DWORD GetProfileSectionA(
LPCSTR lpAppName,
LPSTR lpReturnedString,
DWORD nSize
);
写:
BOOL WritePrivateProfileString(
LPCTSTR lpAppName,
LPCTSTR lpKeyName,
LPCTSTR lpString,
LPCTSTR lpFileName // 要写入的文件的文件路径。
)
BOOL WritePrivateProfileStructA(
LPCSTR lpszSection,
LPCSTR lpszKey,
LPVOID lpStruct,
UINT uSizeStruct,
LPCSTR szFile
);
检索与Win.ini文件的指定部分中的键关联的字符串。
DWORD GetProfileStringA(
LPCSTR lpAppName,
LPCSTR lpKeyName,
LPCSTR lpDefault,
LPSTR lpReturnedString,
DWORD nSize
);
用指定的键和值替换Win.ini文件中指定部分的内容。如果Win.ini使用Unicode字符,则该函数将Unicode字符写入文件。否则,该函数将写入ANSI字符。
BOOL WriteProfileSectionA(
LPCSTR lpAppName,
LPCSTR lpString
);
替换初始化文件中指定部分的键和值。
BOOL WritePrivateProfileSectionA(
LPCSTR lpAppName,
LPCSTR lpString,
LPCSTR lpFileName
);
GetPrivateProfileSection例程:
bool ReadINI()
{
bool ret = true;
CString FileName = AfxGetApp()->m_pszHelpFilePath;
int iPos = FileName.ReverseFind('\\');
FileName = FileName.Left(iPos) + _T("\\Test.ini");
TCHAR StrBuf[1024];
DWORD Count = 0;
DWORD CountPrivate = 0;
memset(StrBuf, '\0', sizeof(StrBuf));
DWORD getCount = ::GetPrivateProfileSection(_T("TEST"), StrBuf, 1024, FileName);
if (0 == getCount)
{
::WritePrivateProfileString(_T("TEST"), _T("1"), _T("12345"), FileName);
return true;
}
int iPreEqual = 0;
int iAftEqual = 0;
int iCurEqual = 0;
int iTmpEqual = 0;
bool bExistError = false;
while (Count < getCount)
{
bExistError = false;
CountPrivate = _tcslen(&StrBuf[Count]) + 1;/* 每个字符串*/
//TRACE(_T(" %s\r\n"), &StrBuf[Count]);
// 将等号前后进行区分
iPreEqual = Count;
iAftEqual = Count + CountPrivate - 1;
Count += CountPrivate;
for (iTmpEqual = iPreEqual + 1; iTmpEqual < iAftEqual; iTmpEqual++)
{
if (StrBuf[iTmpEqual] == _T('='))
{
.....
break;
}
}
if (iTmpEqual >= iAftEqual || bExistError) // 没有找到等号
{
continue;
}
.....
}
return ret;
}
参量
lpAppName
初始化文件中节的名称。
lpReturnedString
指向缓冲区的指针,该缓冲区接收与命名节关联的键名和值对。缓冲区中填充了一个或多个以null终止的字符串;最后一个字符串后跟第二个空字符。
nSize
lpReturnedString参数指向的缓冲区大小,以字符为单位。
配置文件节的最大大小为32,767个字符。
lpFileName
初始化文件的名称。如果此参数不包含文件的完整路径,则系统在Windows目录中搜索文件。
返回值
返回值指定复制到缓冲区的字符数,不包括终止的空字符。如果缓冲区的大小不足以容纳与命名节关联的所有键名和值对,则返回值等于nSize减2。
备注
lpReturnedString参数指向的缓冲区中的数据由一个或多个以空字符结尾的字符串组成,后跟一个最终的空字符。每个字符串具有以下格式:
键= 字符串
该 GetPrivateProfileSection功能是不区分大小写; lpAppName参数指向的字符串可以是大小写字母的组合。
此操作是原子操作;将节的键名和值对复制到lpReturnedString参数指向的缓冲区时,不允许对指定的初始化文件进行更新。
系统使用以下注册表项下定义的映射将大多数.ini文件引用映射到注册表:HKEY_LOCAL_MACHINE <b>软件<b> Microsoft <b> Windows NT <b> CurrentVersion <b> IniFileMapping
如果应用程序修改了系统组件初始化文件,例如Control.ini,System.ini和Winfile.ini,则可能会发生这种映射。在这些情况下,该函数从注册表而不是初始化文件中检索信息。存储位置的更改对功能的行为没有影响。
概要文件功能使用以下步骤来查找初始化信息:
在注册表中的IniFileMapping项下查找初始化文件的名称。
查找lpAppName指定的节名称。这将是具有初始化文件名称的键下的命名值,或者是具有该名称的子键,或者该名称将不作为值或子键存在。
如果lpAppName指定的节名称是一个命名值,则该值指定在注册表中可以找到该节的键的位置。
如果lpAppName指定的节名称是一个子项,则该子项下的命名值将指定您在注册表中找到该节的键的位置。如果您要查找的键不以命名值形式存在,则将有一个未命名的值(显示为<No Name>),该值指定了注册表中可以在其中找到该键的默认位置。
如果lpAppName指定的节名称不作为命名值或子项存在,则将有一个未命名值(显示为<No Name>),该值指定注册表中的默认位置,您可以在其中找到用于部分。
如果节名称没有子项或条目,则在磁盘上查找实际的初始化文件并读取其内容。
查看注册表中指定其他注册表位置的值时,有几个前缀会更改.ini文件映射的行为:
!-此字符将强制所有写入都转到注册表和磁盘上的.ini文件。
#-当新用户在安装后首次登录时,此字符会导致将注册表值设置为Windows 3.1 .ini文件中的值。
@-如果在注册表中找不到请求的数据,则此字符可防止对磁盘上的.ini文件进行任何读取。
USR:-此前缀代表HKEY_CURRENT_USER,并且前缀之后的文本是相对于该键的。
SYS:-该前缀代表HKEY_LOCAL_MACHINE \ SOFTWARE,前缀后的文本是相对于该键的。
注释(以分号开头的任何行)被删除,并且不会在lpReturnedString缓冲区中返回。