[ Вопрос ] Помогите с "парсером" cfg

Забаненный
Статус
Оффлайн
Регистрация
12 Апр 2017
Сообщения
353
Реакции[?]
71
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Доброго времени суток, опять я, хочу замутить "парсер" cfg в пасту ( дада, готовлю пасту для YouGame.BIZ ) :whyRly:
Нужно чтобы он считывал фалы ".ini" с папки "C:\superpasta\".
Так же возможен вариант без считывания, а просто разделение на 3 типа "Legit", "Casual", "SemiRage".
Тому кто реально поможет зае*ашу 3 симпы :seemsgood:
 
Последнее редактирование:
Забаненный
Статус
Оффлайн
Регистрация
19 Июн 2017
Сообщения
5
Реакции[?]
3
Поинты[?]
0
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
IniParser.h:
Код:
#ifndef __INIPARSER__H
#define __INIPARSER__H

#include <Windows.h>
#include <string>
#include <algorithm>
#include <memory>
#include <fstream>

class CIniParser
{
private:
    std::wstring m_wstrPath;

public:
    CIniParser() { }
    CIniParser(std::wstring wstrPath) { SetPath(wstrPath); }
    ~CIniParser() { }

    bool IsOpen() const
    {
        std::wifstream ini(m_wstrPath);
        return ini.good();
    }

    void SetPath(std::wstring wstrPath)
    {
        if (wstrPath.empty())
            return;

        std::replace(wstrPath.begin(), wstrPath.end(), L'/', L'\\');
        m_wstrPath = wstrPath;
    }

    std::wstring ReadString(std::wstring wstrApp, std::wstring wstrKey) const
    {
        if (m_wstrPath.empty() || wstrApp.empty() || wstrKey.empty())
            return L"";

        WCHAR wcsBuffer[512] = L"";
        if (GetPrivateProfileStringW(wstrApp.data(), wstrKey.data(), L"", wcsBuffer, sizeof(wcsBuffer), m_wstrPath.data()) == NULL)
            return L"";

        return std::wstring(wcsBuffer);
    }

    bool WriteString(std::wstring wstrApp, std::wstring wstrKey, std::wstring wstrValue) const
    {
        if (m_wstrPath.empty() || wstrApp.empty() || wstrKey.empty())
            return false;

        return (WritePrivateProfileStringW(wstrApp.data(), wstrKey.data(), wstrValue.data(), m_wstrPath.data()) != NULL);
    }

    int ReadInt(std::wstring wstrApp, std::wstring wstrKey) const
    {
        if (m_wstrPath.empty() || wstrApp.empty() || wstrKey.empty())
            return 0;

        return std::stoi(ReadString(wstrApp, wstrKey));
    }

    bool WriteInt(std::wstring wstrApp, std::wstring wstrKey, int iValue) const
    {
        if (m_wstrPath.empty() || wstrApp.empty() || wstrKey.empty())
            return false;

        return WriteString(wstrApp, wstrKey, std::to_wstring(iValue));
    }

    float ReadFloat(std::wstring wstrApp, std::wstring wstrKey) const
    {
        if (m_wstrPath.empty() || wstrApp.empty() || wstrKey.empty())
            return 0.0f;

        return std::stof(ReadString(wstrApp, wstrKey));
    }

    bool WriteFloat(std::wstring wstrApp, std::wstring wstrKey, float flValue) const
    {
        if (m_wstrPath.empty() || wstrApp.empty() || wstrKey.empty())
            return false;

        return WriteString(wstrApp, wstrKey, std::to_wstring(flValue));
    }
};

#endif

Пример использования:
Код:
#include <iostream>
#include "IniParser.h"

int main()
{
    auto pIniParser = std::make_unique<CIniParser>(L"./Test.ini");
    if (!pIniParser->IsOpen()) {
        std::wcout << L"Failed to open ini file!" << std::endl;
    } else {
        std::wcout << L"Integer: " << pIniParser->ReadInt(L"Test", L"Integer")   << std::endl;
        std::wcout << L"Float:   " << pIniParser->ReadFloat(L"Test", L"Float")   << std::endl;
        std::wcout << L"String:  " << pIniParser->ReadString(L"Test", L"String") << std::endl;

        pIniParser->WriteInt(L"Test", L"Integer", 2017);
        pIniParser->WriteFloat(L"Test", L"Float", 20.17f);
        pIniParser->WriteString(L"Test", L"String", L"Yougame.biz");
    }
    getchar();
    return EXIT_SUCCESS;
}

Test.ini
Код:
[Test]
Integer=2017
Float=20.170000
String=Yougame.biz
 
Последнее редактирование:
Сверху Снизу