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

Забаненный
Забаненный
Статус
Оффлайн
Регистрация
12 Апр 2017
Сообщения
375
Реакции
71
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
Доброго времени суток, опять я, хочу замутить "парсер" cfg в пасту ( дада, готовлю пасту для YouGame.BIZ ) :whyRly:
Нужно чтобы он считывал фалы ".ini" с папки "C:\superpasta\".
Так же возможен вариант без считывания, а просто разделение на 3 типа "Legit", "Casual", "SemiRage".
Тому кто реально поможет зае*ашу 3 симпы :seemsgood:
 
Последнее редактирование:
Обратите внимание, пользователь заблокирован на форуме. Не рекомендуется проводить сделки.
IniParser.h:
Код:
Expand Collapse Copy
#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


Пример использования:
Код:
Expand Collapse Copy
#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
Код:
Expand Collapse Copy
[Test]
Integer=2017
Float=20.170000
String=Yougame.biz
 
Последнее редактирование:
Назад
Сверху Снизу