|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|||||||||||
ifstream / ofstream - exceptions кроме eof26.09.2024, 14:04. Показов 2592. Ответов 19
Метки нет (Все метки)
Хотелось бы иметь возможность пользоваться ifstream / ofstream таким образом, чтобы по умолчанию была включена генерация исключений при ошибках ввода / вывода, но при этом не возникало бы исключения, если достигнут конец файла.
Попробовал набросать классы: TMyFstream.h:
Посоветуйте.
0
|
|||||||||||
| 26.09.2024, 14:04 | |
|
Ответы с готовыми решениями:
19
ifstream / ofstream
ifstream ofstream |
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 26.09.2024, 16:59 | |
|
Всё уже продумано до вас :
https://cplusplus.com/referenc... xceptions/ https://en.cppreference.com/w/... exceptions Добавлено через 2 минуты И собственно табличка по набору флагов : en.cppreference.com/w/cpp/io/ios_base/iostate#See_also
0
|
|
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
||||||
| 26.09.2024, 19:01 [ТС] | ||||||
|
Да, но всё равно не понятно, как сделать, чтоб исключения генерились только в случае
0
|
||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||
| 26.09.2024, 19:40 | |||||||
|
По первой ссылки же пример, как раз тот что вам нужен.
0
|
|||||||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|||||||||||
| 27.09.2024, 13:17 [ТС] | |||||||||||
|
Вот этот пример как раз не работает.
Немного изменил его, чтоб запустить в onlinegdb:
0
|
|||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||||||||||
| 27.09.2024, 13:50 | ||||||||||||
|
ZenBooster, многие функции, такие как get() устанавливают и eofbit и failbit, поэтому и срабатывает исключение.
Пример :
Добавлено через 10 минут ZenBooster, ещё один пример, где eofbit есть - исключения нет :
ZenBooster, мне кажется, или вы очередной искатель который хочет поведения работы с файлами как в Pascal ? ) Добавлено через 2 минуты p.s. Добавьте в последнем примере ifstream::eofbit в установку исключений и при выполнении получите исключение. То есть, на ваш прямой вопрос, пост №2, удовлетворяет полностью.
0
|
||||||||||||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
||||||||||||
| 27.09.2024, 13:53 [ТС] | ||||||||||||
|
Это можно было бы сделать вот так:
Пока что, получилось вот так:
0
|
||||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 27.09.2024, 14:01 | |
|
Зачем вы всё так усложняете, работая через исключения, через состояние потока куда проще и экономнее ?
0
|
|
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|||
| 27.09.2024, 14:02 [ТС] | |||
|
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||||
| 27.09.2024, 14:13 | ||||
|
К тому же, откуда вызывающая сторона через метод
TMyFStreamBase::read будет знать сколько данных прочиталось ???Добавлено через 1 минуту Какой то вы "гемор" придумали, ещё похуже чем в STL. Добавлено через 1 минуту Добавлено через 7 минут В С++ нет типизированных файлов.
0
|
||||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
||||||||||||||||||||||||||||||
| 27.09.2024, 14:55 [ТС] | ||||||||||||||||||||||||||||||
|
https://en.cppreference.com/w/... tream/read
0
|
||||||||||||||||||||||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||
| 27.09.2024, 15:07 | |||
![]() Для этого, ваша обертка, должна читать данные наперед и отдавать их по запросу. Иначе, с не типизированными файлами, не получится. По крайней мере со STL потоками. Добавлено через 2 минуты
0
|
|||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|||
| 27.09.2024, 15:11 [ТС] | |||
|
Лень - двигатель прогресса )
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
||
| 27.09.2024, 15:22 | ||
|
Потому что ни вы и ни поток не будет знать, что конец файла уже достигнут. Поэтому у вас будет такое же самое поведение как и у стандартных потоков, потому что (вам лень) вы ничего не делаете. Плюс добавили работу с исключениями, там где это вовсе не нужно.
0
|
||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|
| 27.09.2024, 15:36 [ТС] | |
|
Лишнее исключение на быстродействии не скажется. Диск всяко медленнее. Зато код писать удобней )
0
|
|
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||||
| 27.09.2024, 15:58 | |||||||
|
И что мы видим, что у вас классическая распространенная ошибка по использованию eof() : последний символ читается дважды : "Hello World""Можете допилить, наверное, но это такое себе. Ещё раз повторю, что бы использовать в таком варианте как while(F.Eof()){readdata;} именно с потоками, вам придется сначала читать данные, а лишь потом их отдавать при чтении, но если мы не знаем что пользователь читает(в отличии от типизированных файлов), как в стандартных потоках, то мы этого сделать не можем в априори.Пока (дальше продолжать не буду) сделал простенький пример работы с типизированными файлами, и только для fstream : https://onlinegdb.com/owJdNH3Z8 Кликните здесь для просмотра всего текста
0
|
|||||||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|||||||||||||||||
| 27.09.2024, 16:07 [ТС] | |||||||||||||||||
Я бы переделал цикл:
0
|
|||||||||||||||||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|||||
| 27.09.2024, 16:27 | |||||
|
Я же писал : Добавлено через 3 минуты
0
|
|||||
|
5 / 5 / 0
Регистрация: 30.01.2015
Сообщений: 44
|
|||
| 27.09.2024, 17:05 [ТС] | |||
|
0
|
|||
|
4086 / 2975 / 813
Регистрация: 29.06.2020
Сообщений: 11,000
|
|
| 27.09.2024, 18:42 | |
|
0
|
|
| 27.09.2024, 18:42 | |
|
Помогаю со студенческими работами здесь
20
Ошибка с ofstream и ifstream Ошибка с ifstream и ofstream C++ файлы ifstream/ofstream ifstream/ofstream/fstream
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|