【问题标题】:GetPrivateProfileInt always return default valueGetPrivateProfileInt 总是返回默认值
【发布时间】:2019-07-05 15:51:23
【问题描述】:

我在 Windows x64 PC 上使用 Visual Studio 2019,我有下面列出的简单代码:

“magazzini.ini”文件是这样的:

[Delicarta]
A=55
B=80

GetPrivateProfileInt 返回的输出值始终是默认值 0,而不是我在文件中写入的值。 我怎么解决这个问题?我必须将文件放在特殊目录中吗?

我尝试将文件名更改为“.\magazzini.ini”,并写入完整路径(C:..)但我没有解决问题

#include <iostream>
#include <Windows.h>

using namespace std;

int main()
{
    int A, B;

    // leggo i parametri dal file magazzini.ini
    A = GetPrivateProfileInt(L"Delicarta", L"A", 0, L"magazzini.ini");
    B = GetPrivateProfileInt(L"Delicarta", L"B", 0, L"magazzini.ini");

    cout << "Il valore del parametro A e' " << A << "\n";
    cout << "Il valore del parametro B e' " << B << "\n";

    system("PAUSE");
    return 0;
}

【问题讨论】:

  • 需要指定路径为“.\\magazine.ini”
  • 您展示了 ini 文件中的内容,但从未提及 在哪里。而且我们不能说您的“完整路径”尝试是有效的,因为您从未展示过它(路径),而且我们知道您没有正确地转义分隔符。从集成调试器运行时,默认工作目录是包含项目的 project 文件(.vcprojx 文件)的文件夹。将文件放在那里,并使用".\\magazzini.ini" 作为文件名应该工作。

标签: c++ default ini


【解决方案1】:

根据GetPrivateProfileInt() 文档:

lpFileName

初始化文件的名称。 如果此参数不包含文件的完整路径,系统会在 Windows 目录中搜索文件。

因此,您必须提供 INI 文件的完整绝对路径。 L"magazzini.ini"L".\\magazzini.ini" 不会按您预期的方式工作。

如果 INI 文件与可执行文件位于同一文件夹中,请使用 GetModuleFileName() 检索可执行文件的完整路径,然后根据需要替换文件名部分,例如:

#include <iostream>
#include <Windows.h>
#include <shlwapi.h>

using namespace std;

int main()
{
    int A, B;

    WCHAR iniFilename[MAX_PATH] = {};
    GetModuleFileNameW(NULL, iniFilename, MAX_PATH);
    PathRemoveFileSpecW(iniFileName);
    PathCombineW(iniFilename, iniFilename, L"magazzini.ini");

    // leggo i parametri dal file magazzini.ini
    A = GetPrivateProfileInt(L"Delicarta", L"A", 0, iniFilename);
    B = GetPrivateProfileInt(L"Delicarta", L"B", 0, iniFilename);

    cout << "Il valore del parametro A e' " << A << "\n";
    cout << "Il valore del parametro B e' " << B << "\n";

    system("PAUSE");
    return 0;
}

【讨论】:

  • 我试图把完整路径 L"C:\\Users\\User\\source\\repos\\Posizione_ancore_2.0.cpp\\Posizione_ancore_2.0\\magazzini.ini" 但是仍然有同样的问题。我还尝试将文件放在 Windows 目录 (C:\\Windows) 中,但仍然获得 A=0 和 B=0... :(
  • @SimoneSciarretta 唯一可能发生的情况是 API 找不到 INI 文件。使用SysInternals Process Monitor 准确查看它在哪里寻找文件以及为什么找不到它
猜你喜欢
  • 2014-08-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多