Я работаю над файловой системой сохранения для игры и пытаюсь убедиться, что могу открыть файл в небольшой тестовой программе, определить, пуст ли он, если он пуст, предложить пользователю создать персонажа, и если его не пустая загрузка информации о персонаже в переменные, которые будут использоваться в игре. До сих пор в моем тестировании я создавал файлы в блокноте (оставляя их пустыми), сохранял их с соответствующими расширениями и пытался открыть файл и проверить, пусты ли они.
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
int main ( int argc, char* argv[])
{
struct charFile
{
int chapterNum;
int savePoint;
string firstName;
char gender, hairColor, hairType, hairLength, eyeColor, profession, magic, martialSkills;
bool hasPet;
} character;
fstream save;
char saveFileChoice;
string saveFile;
cout << "Select a File (1, 2, 3, 4, 5, or 6): ";
cin >> saveFileChoice;
saveFile = saveFileChoice + ".charsav";
save.open(saveFile.c_str());
if (!save.good())
{
cout << "Save file cannot be opened.\n";
}
char tempStr[12];
save.getline (tempStr, 256);
if ( tempStr == "EMPTY" )
{
cout << "There is no save data in the file. Starting a new game...\n\n";
cout << "What is your character's name? ";
cin >> character.firstName;
save << character.firstName;
}
return 0;
}
Мне было интересно, почему файл никогда не попадал в оператор if, даже если он был пуст, а затем, даже когда я добавил в файл ПУСТЫЕ символы ascii и изменил условие. Затем я вставил:
if (!save.good())
{
cout << "Save file cannot be opened.\n";
}
и при запуске постоянно выдает сообщение, что файл почему-то не открывается. =/ Я не могу понять, почему.
Я проверил файлы, и они не отформатированы как .charsav.txt или что-то в этом роде, они все еще просто 1.charsav, 2.charsav и т. д. Я чувствую, что мне не хватает чего-то простого и очевидного. Может ли кто-нибудь указать это для меня?
std::string tempStr; std::getline(save, tempStr);
. Но вы все еще забываете массу ошибок, проверяя слева, справа и по центру. - person Kerrek SB   schedule 05.08.2012