首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Borland BCB5 TInifile忽略Readstring()的引号?

Borland BCB5 TInifile忽略Readstring()的引号?
EN

Stack Overflow用户
提问于 2016-06-02 15:03:37
回答 2查看 385关注 0票数 3

我不太熟悉Borland的C++ Builder 5,并且被一个问题困住了。

我有一个INI文件:

代码语言:javascript
复制
[Section1]
Ident1="myUser1"
Ident2=myPassword

我用以下代码读取用户名和密码值:

代码语言:javascript
复制
{
auto_ptr<TIniFile> ifile(new TIniFile(myinifile));
AnsiString InternalUser= ifile->ReadString("Section1", "Ident1", "Defaultuser");
AnsiString InternalPassword= ifile->ReadString("Section1", "Ident2","Defaultpassword");
}

下面是函数声明:

代码语言:javascript
复制
virtual AnsiString __fastcall ReadString(const AnsiString Section, const AnsiString Ident, const AnsiString Default);

预期产出:

代码语言:javascript
复制
Ident1="myUser1" (with ")
Ident2=myPassword

实际产出:

代码语言:javascript
复制
Ident1=myUser1 (without ")
Ident2=myPassword

当我试图调试它的时候,我收到了很多我不知道并且找不到文档的Delphi调用,比如LStrToPCharLStrClr等等。

我原以为会有某种Trim(),但我错了。

有人能给我讲讲这个问题吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-02 15:36:13

该类是长期以来被废弃的Windows文件API的包装器。读取值的函数是GetPrivateProfileString,其文档显示:

如果与lpKeyName关联的字符串以单引号或双引号括起来,则在GetPrivateProfileString函数检索该字符串时,标记将被丢弃。

这就是你所观察到的行为。

票数 4
EN

Stack Overflow用户

发布于 2016-06-02 15:26:28

似乎不是Borland造成的问题,而是底层Windows例程的行为。使用MSVC进行快速检查会得到同样的结果。

代码语言:javascript
复制
#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文件:

代码语言:javascript
复制
[Test]
Test="string with quotes"

结果:

代码语言:javascript
复制
string with quotes

我是有记录的行为

如果与lpKeyName关联的字符串以单引号或双引号括起来,则在GetPrivateProfileString函数检索该字符串时,标记将被丢弃。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37595528

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档