GetPrivateProfileInt всегда возвращает значение по умолчанию - PullRequest
0 голосов
/ 05 июля 2019

Я использую Visual Studio 2019 на ПК с Windows x64, и у меня есть простой код, указанный ниже:

Файл "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;
}

1 Ответ

0 голосов
/ 05 июля 2019

В документации 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;
}
...