我有以下INI文件:
[Connection]
Protocol=HTPP
[Connection]
Protocol=HTTPS
有什么方法可以将两个协议保存在两个不同的变量中?我试着写:
int a = GetPrivateProfileString(_T("Connection"), _T("Protocol"), _T(""), protocolChar, 32, path);
int ab = GetPrivateProfileString(_T("Connection"), _T("Protocol"), _T(""), protocolChar2, 32, path);
结果是ProtocolChar,protocolChar2,虽然都接收“HTTP” 如何以不同的方式保持所有协议的变量?
答案 0 :(得分:0)
不,GetPrivateProfileString
不支持具有相同名称的多个部分,并且始终使用它遇到的第一个部分。可以使用几种直接的方法。第一种是简单地在每个部分名称的末尾添加一个数字。
[Connection0]
Protocol=HTPP
[Connection1]
Protocol=HTTPS
[Connection2]
Protocol=FTP
[Connection3]
Protocol=Telnet
使用这种方法,您可以遍历各个Connection
部分,直到您尝试加载不存在的部分。
#include <windows.h>
#include <iostream>
#include <sstream>
int main()
{
for (DWORD i = 0, size = 1; size != 0; ++i)
{
std::ostringstream name;
name << "Connection" << i;
std::string protocol(100, 0);
size = GetPrivateProfileStringA(
name.str().c_str(),
"Protocol",
NULL,
&protocol[0],
protocol.size(),
"./test1.ini");
if (size != 0)
{
protocol.resize(size);
std::cout
<< name.str().c_str()
<< ":protocol=" << protocol << "\n";
}
}
}
另一种方法是有一个主要部分(即Connections
),它定义了每个具有唯一名称的其他部分的列表。这样做的好处是这些部分更易于管理,一个部分被删除,无需重新排序其余部分。在这种情况下,您只需重写Connections
。
[Connections]
Connection0=HTTPConnection
Connection1=HTTPSConnection
Connection2=FTPConnection
Connection3=TelnetConnection
[HTTPConnection]
Protocol=HTPP
[HTTPSConnection]
Protocol=HTTPS
[FTPConnection]
Protocol=FTP
[TelnetConnection]
Protocol=Telnet
使用这种方法,您可以迭代Connections
的条目,然后加载每个部分。
#include <windows.h>
#include <iostream>
#include <sstream>
int main()
{
for (DWORD i = 0, size = 1; size != 0; ++i)
{
std::ostringstream name;
name << "Connection" << i;
std::string section(100, 0);
size = GetPrivateProfileStringA(
"Connections",
name.str().c_str(),
NULL,
§ion[0],
section.size(),
"./test1.ini");
if (size != 0)
{
section.resize(size);
std::string protocol(100, 0);
size = GetPrivateProfileStringA(
section.c_str(),
"Protocol",
NULL,
&protocol[0],
protocol.size(),
"./test1.ini");
if (size != 0)
{
protocol.resize(size);
std::cout
<< name.str().c_str()
<< ":"
<< section
<< ":protocol=" << protocol << "\n";
}
}
}
}