Поэтому я пишу создание файла пользователя, и у меня есть до сих пор, но я зациклился на том, как получить конкретную строку в тексте и использовать эту переменную в программе.
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. Хотя я то, что я не хочу делать, должен использовать внешнюю библиотеку, я хочу иметь возможность делать это прямо из окон.
Вот как я разбираю файлы конфигурации:
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;
}
continue
выше по существу не имеет никакого эффекта. Если вы хотите только первое появление «Blah:», то вы, вероятно, хотитеbreak
а неcontinue
.