Iostreams мало что дает. Потоковые объекты являются просто обертками вокруг буферного объекта, полученного из класса std::streambuf
. (Предполагая «узкие» символы.) Стандартные производные классы буфера: std::stringbuf
для строк и std::filebuf
для файлов. Предположим, что вас интересуют только файлы, std::filebuf
- это просто оболочка для функциональности библиотеки C. Библиотека C не определяет способ определения, поддерживает ли объект FILE
поиск или нет, кроме попыток сделать это, так же как и C ++.
Для чего это стоит, семантика seek
немного варьируется. Некоторые платформы могут позволять вам «искать» канал, но только в текущей позиции, чтобы определить, сколько символов было прочитано или записано. Поиск за концом может изменить размер файла или вызвать следующую операцию записи, чтобы изменить размер файла, или что-то среднее.
Вы также можете попробовать проверить errno
, если установлен badbit
(или, как я предпочитаю, использовать исключения вместо флагов).