Страницы

Поиск по вопросам

среда, 22 января 2020 г.

Узнать, является ли поток бинарным

#cpp #файлы


Предположим, что у меня есть поток для записи в файл ofstream 

f(name,ios::binary|ios::in); 


Можно ли узнать, установлен ли флаг ios::binary для этого потока или нет.
Ну или как-то по-другому узнать что это бинарный поток.
    


Ответы

Ответ 1



Чтобы быстро всё исправить и все флаги сохранились попробуйте собственную подделку: // g++ fflags.cpp # include # include namespace Alex { class ofstream : public std::ofstream{ public: std::ios_base::openmode mo ; ofstream(const std::string& filename, std::ios_base::openmode m): std::ofstream(filename,m),mo(m|std::ofstream::out){} }; } void m(Alex::ofstream & f){ std::cout<<"ios::binary = "; if(f.mo bitand std::ios::binary) std::cout<<"Ok\n"; else std::cout<<"No\n"; } int main(){ char const * name = "test"; Alex::ofstream f(name,std::ios::binary|std::ios::in); m(f); } > ./a.out ios::binary = Ok

Ответ 2



Никак не узнать. И для std::FILE* тоже не узнать как был открыт файл.

Комментариев нет:

Отправить комментарий