15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


Как прочитать файл до конца, используя класс CFile.

Вопрос (Alessandro Chiodo):

Я использую в своём приложении класс CFile. При помощи этого класса я открываю файл, считываю и записываю в него. Но у меня не получается считать файл до конца (EOF). Обрабатываю CFileException::endOfFile, однако получаю бесконечный цикл.

Ответ (Paul DiLascia):

Странно, не так ли ? Когда при считывании файла мы доходим до конца, то ожидаем получить исключение конца файла. А иначе для чего ещё придумана endOfFile ? Однако, в данном случае MFC не использует CFileException::endOfFile. Для определения конца файла нам потребуется проверить, является ли количество фактически считанных байт меньше чем количество запрошенных.

CFile file;
file.Open();
char mybuf[BUFSIZ];
UINT nread;
do (nread=file.read(buf, BUFSIZ)) {
  •••
// обрабатываем nread байт

} while (nread==BUFSIZ);

Данный способ может показаться странным, но не я же придумывал эти правила.