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

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

Какие условия цикла я использую, чтобы прочитать пустой файл?

Так как !fin.eof() условие не работает и создает бесконечный цикл.

Я использую Turbo C ++ и у меня есть 2 файла. Файл музыкальной библиотеки уже содержит несколько альбомов. Мне нужно отфильтровать и удалить повторяющиеся альбомы и добавить его в фильтр-файл.

Мой код следующий:

void albumfilter()
{
song s;
album a;

ifstream fin;
fstream finout;

fin.open("Musiclibrary.txt", ios::binary);

while(!fin.eof())
{
fin.read((char*)&s,sizeof(s));
if(fin.eof())
break;

finout.open("Filteralbum.txt", ios::binary| ios::in| ios::out);

while(!finout.eof())
{
finout.read((char*)&a, sizeof(a));

if(strcmp(a.getfilter_albumname(), s.getalbum())!=0)
{
strcpy(a.getfilter_albumname(),s.getalbum());
finout.write((char*)&a, sizeof(a));
finout.close();
}
}
}

fin.close();
}

Этот код правильный?

0

Решение

eof() будет установлен только тогда, когда будет сделана попытка чтения за концом файла: вы должны попытаться прочитать хотя бы один раз. От std::basic_ios::eof:

Эта функция только сообщает о состоянии потока, установленном самой последней операцией ввода-вывода, но не проверяет связанный источник данных. Например, если последний ввод-вывод был get (), который возвратил последний байт файла, eof () возвращает false. Следующий get () ничего не читает и устанавливает eofbit. Только тогда eof () возвращает true.

7

Другие решения

Так же, как вы читаете непустой файл, вы помещаете операцию чтения как условие для цикла. Код должен быть понятен:

std::vector<std::string> lines;
std::ifstream file("file.x");

if (file.is_open()) {

while (std::getline(file, line)) {  // you can use operator>> here, too
lines.push_back(line);
}

if (file.bad() || file.fail()) {
std::cout << "An error occured during reading.";
} else if (lines.empty()) {
std::cout << "The file is empty.";
}

} else {
std::cout << "Couldn't open file.";
}

Если вы используете operator>> читать что-то другое, чем std::strings, то логика проверки ошибок меняется — возможно, что цикл заканчивается и eof еще не установлен. (Скажите, если вы читаете в ints и операция извлечения встречает не цифру по пути). Вы должны принять это во внимание.

5

       ifstream fin("empty-file.txt");
string line;
while(true){
fin>>line;
if(fin.eof())break;
}

Я думаю, что это должно сделать. Но почему вы хотите прочитать пустой файл?

-1
По вопросам рекламы [email protected]