Я написал следующий исходный код:
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-й раз, когда файл не может быть открыт, и появляется сообщение об ошибке. Зачем?
Не могли бы вы предложить мне решение?
Возможно, вы выполнили работу над потоком, который установил один или несколько флагов ошибок, таких как eofbit
,
Закрытие потока не очищает его флаги ошибок, вы должны сделать это вручную. Вызов leggiFile.clear();
после закрытия
Начиная с C ++ 11, это делается автоматически open()
, хоть. Если вы уже используете компилятор C ++ 11, ваша проблема в другом месте (не могу сказать, где, вы не показали достаточно кода).
Учить singleton
шаблон проектирования для регистрации или любого множественного доступа к любому файлу. Вы также можете использовать блокировку Mutex, так что код будет ожидать ресурсов, таких как файлы. Но не стоит использовать один и тот же файл одновременно. Файл может быть открыт для lyfecycle кода. Это не проблема.