我对Borland C ++ Builder 5并不熟悉,而且我遇到了一个问题。
我有一个INI文件:
[Section1]
Ident1="myUser1"
Ident2=myPassword
我使用以下代码阅读了用户名和密码值:
{
auto_ptr<TIniFile> ifile(new TIniFile(myinifile));
AnsiString InternalUser= ifile->ReadString("Section1", "Ident1", "Defaultuser");
AnsiString InternalPassword= ifile->ReadString("Section1", "Ident2","Defaultpassword");
}
这是函数声明:
virtual AnsiString __fastcall ReadString(const AnsiString Section, const AnsiString Ident, const AnsiString Default);
预期产出:
Ident1="myUser1" (with ")
Ident2=myPassword
实际输出:
Ident1=myUser1 (without ")
Ident2=myPassword
在尝试调试时,我收到了许多我不知道的Delphi系统调用,无法找到文档,例如LStrToPChar
,LStrClr
等。
我期待某种Trim()
,但错了。
有人可以告诉我这个问题吗?
答案 0 :(得分:4)
这个类是很久以前弃用的Windows INI文件API的包装器。读取值的函数是GetPrivateProfileString
,其文档说明:
如果与lpKeyName关联的字符串用单引号或双引号括起来,则当GetPrivateProfileString函数检索字符串时,将丢弃这些标记。
因此你观察到的行为。
答案 1 :(得分:2)
似乎不是由Borland引起的问题,而是基础Windows API例程的行为。使用MSVC进行快速检查会得到相同的结果。
#include "stdafx.h"
#include <Windows.h>
int _tmain(int argc, _TCHAR* argv[])
{
TCHAR buf[400];
GetPrivateProfileString( _T("Test"), _T("Test"), _T("Default"), &buf[0], 400, _T("test.ini"));
_tprintf(_T("%s\n"),&buf);
return 0;
}
INI档案:
[Test]
Test="string with quotes"
结果:
string with quotes
如果与lpKeyName关联的字符串用单引号或双引号括起来,则当GetPrivateProfileString函数检索字符串时,将丢弃这些标记。