C ++ Как я могу получить определенную строку текстового файла

0

Поэтому я пишу создание файла пользователя, и у меня есть до сих пор, но я зациклился на том, как получить конкретную строку в тексте и использовать эту переменную в программе.

    int Player::CheckAccount()
{
    Network net;

    bool fileFound = false;
    string user = GetLoginUser();
    string openDir = "./Characters/" + user + "/" + user + ".ini";

    if (fileFound == false) {
        ifstream openFile(openDir);
        if (openFile.good()) {
            util::Logger::Dbg("File found for user " + user);
            openFile.open(openDir);
            util::Logger::Dbg("User file " + user + " is ready to be checked");
            fileFound = true;
        } else {
            util::Logger::Dbg("Could not find user file for " + user + " creating new character file" );
            CreateAccount(GetLoginUser());
        }
    }
    return net.GetFinalSize() == 1;
}

void Player::CreateAccount(string user)
{
    string dir = "./Characters/" + user;

    if(CreateDirectory(dir.c_str(), NULL)) {
        util::Logger::Dbg("Created new user directory for " + user);
    } else {
        util::Logger::Dbg("Could not create new user directory for " + user);
    }

    string fileName = user + ".ini";

    ofstream createUser;

    string charDir = "./Characters/" + user + "/" + fileName;

    createUser.open(charDir);

    SetPlayerBanned(false);
    SetInAppUsername(user);

    createUser << "Username = " << GetLoginUser() << endl;
    createUser << "Password = " << GetLoginPass() << endl;
    createUser << "app Username = " << GetInAppUsername() << endl;
    createUser << "Status = " << GetStatus() << endl;
    createUser << "Bio = " << GetBio() << endl;
    createUser << "Banned status = " << IsPlayerBanned() << endl;
    createUser << "Avatar dir = " << GetAvatarDir() << endl;

    createUser.close();
}

Поэтому в функции checkaccount я хочу иметь возможность извлекать переменную из текстового документа, который был бы bool banstatus. Хотя я то, что я не хочу делать, должен использовать внешнюю библиотеку, я хочу иметь возможность делать это прямо из окон.

Теги:
fstream

1 ответ

0

Вот как я разбираю файлы конфигурации:

int config::Parse(void)
{
    std::ifstream cfile("file.conf");

    if(! cfile.is_open()) Util::Error(ErrorNum::NoFileOpen, confile, __func__);

    str line = "";
    std::regex rxlognum("("Blah: ")(.*)"); // "Blah: " is what you want to name the variable 
    std::smatch rxm;

    while(getline(cfile, line))
    {
        if(std::regex_match(line, rxm, rxlognum))
        {
            TheVariable = rxm[2];
            break;
        }
    }

    cfile.close();

    return 0;
}
  • 0
    continue выше по существу не имеет никакого эффекта. Если вы хотите только первое появление «Blah:», то вы, вероятно, хотите break а не continue .
  • 0
    Спасибо за это, я постараюсь добавить его в свой код :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню