我不太熟悉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(),但我错了。
有人能给我讲讲这个问题吗?
发布于 2016-06-02 15:36:13
该类是长期以来被废弃的Windows文件API的包装器。读取值的函数是GetPrivateProfileString,其文档显示:
如果与lpKeyName关联的字符串以单引号或双引号括起来,则在GetPrivateProfileString函数检索该字符串时,标记将被丢弃。
这就是你所观察到的行为。
发布于 2016-06-02 15:26:28
似乎不是Borland造成的问题,而是底层Windows例程的行为。使用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函数检索该字符串时,标记将被丢弃。
https://stackoverflow.com/questions/37595528
复制相似问题