Многократное использование одного и того же объекта потоковой передачи файлов

Я написал следующий исходный код:

ifstream leggiFile;
leggiFile.open("Questions.txt",ios::in);

if (!leggiFile.good())
{
cerr << "\n\n\n\tErrore during file opening Questions.txt\n\n\n" << endl;
}
else
{
// ...
};

leggiFile.close();
system("pause");

Теперь я хотел бы использовать тот же объект для работы со вторым файлом.

leggiFile.open("Answers.txt",ios::in);

i=0;
if(!leggiFile.good())
{
cerr << "\n\n\n\tError during opening of file answers.txt\n\n\n" << endl;
}
else
{
// ...
}

Проблема: 2-й раз, когда файл не может быть открыт, и появляется сообщение об ошибке. Зачем?
Не могли бы вы предложить мне решение?

0

Решение

Возможно, вы выполнили работу над потоком, который установил один или несколько флагов ошибок, таких как eofbit,

Закрытие потока не очищает его флаги ошибок, вы должны сделать это вручную. Вызов leggiFile.clear(); после закрытия

Начиная с C ++ 11, это делается автоматически open(), хоть. Если вы уже используете компилятор C ++ 11, ваша проблема в другом месте (не могу сказать, где, вы не показали достаточно кода).

2

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

Учить singleton шаблон проектирования для регистрации или любого множественного доступа к любому файлу. Вы также можете использовать блокировку Mutex, так что код будет ожидать ресурсов, таких как файлы. Но не стоит использовать один и тот же файл одновременно. Файл может быть открыт для lyfecycle кода. Это не проблема.

0

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