Здравствуйте, помогите пожалуйста, решить проблему.
Я записываю в файл записи, но я хочу сделать , так , чтобы когда пользователь вводил имя файла, и если в файле ничего нет, он бы выводил соответствующее сообщение о пустоте в этом файле.
Не могу понять в чем проблема в моем методе.
Если я создаю файл 2.bin, например, но перед этим я ничего в него не записывал,то мой метод говорит, что я имею одну запись.
Код:
void City::readRecordings(char *fileName, char *num, std::vector<string> lines)
{
string str;
int readCount = 0;
int n = atoi(num);
long file_size;
readRecord.seekg(0, std::ios::end);
file_size = readRecord.tellg();
if (file_size == 0){
std::cout << "File empty" << std::endl;
readRecord.close();
}
if (_access(fileName, 0) != 0) {
std::cout << "Error" << std::endl;
}
else {
readRecord.open(fileName);
while (!readRecord.eof())
{
std::getline(readRecord, str);
readCount++;
lines.push_back(str);
}
if (0 == readCount)
{
std::cout << "ERROR: The file, which you are trying to open, is empty or it stops out" << END;
exit(-1);
}
if (n > readCount)
{
std::cout << "!Warning!" << END;
std::cout << "You want to read " << n << " recordings" << " But AVAILABLE: " << readCount << " recordings" << END;
printRecordsFromFile(readCount, lines);
}
else
{
printRecordsFromFile(n, lines);
}
}
}
void City::printRecordsFromFile(i num, std::vector<string> lines)
{
for (i j = 0; j < num; j++)
std::cout << lines[j] << std::endl;
}
Вот это:
readRecord.eof()
сработает только после попытки чтения, а не до. Флаг конца файла устанавливается при неудачном чтении. Так что ваша проверка до ничего не дает...
Сборка персонального компьютера от Artline: умный выбор для современных пользователей