Как узнать open_mode в открытом stream?
От: Sah Беларусь  
Дата: 23.04.02 07:10
Оценка:
Hi!
Can I test, what open_mode in stream?

I want:
instream& Read(instream& is, CMyClass& my)
{
if(is.???? & ios::binary)
{
ReadFromBinary(is, my);
}
else
{
ReadFromText(is, my);
}
return is;
}

Thanks.
Sergey
Sergey.
Re: Как узнать open_mode в открытом stream?
От: Sergey Россия  
Дата: 23.04.02 07:45
Оценка:
Здравствуйте Sah, Вы писали:

Sah>Hi!

Sah>Can I test, what open_mode in stream?

Sah>I want:

Sah>instream& Read(instream& is, CMyClass& my)
Sah>{
Sah>if(is.???? & ios::binary)
Sah>{
Sah>ReadFromBinary(is, my);
Sah>}
Sah>else
Sah>{
Sah>ReadFromText(is, my);
Sah>}
Sah>return is;
Sah>}

Собственно, неплохо бы было уточнить, о каком это instream речь идет? В стандартной библиотеке C++, AFAIK, нет такого класса.
Если имеется в виду std::istream, то никак — у него нет метода open и он не обязан различать binary и text режимы.
Если речь идет о std::ifstream, то, не завязываясь на детали реализации, насколько я знаю, тоже не узнаешь

Да и вообще, суета это — самому \r\n в \n преобразовывать (а ничем другим binary от text вроде и не отличается). Открывай всегда в binary и не мучайся
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: Как узнать open_mode в открытом stream?
От: Sah Беларусь  
Дата: 23.04.02 08:21
Оценка:
Здравствуйте Sergey, Вы писали:

Sah>>I want:

Sah>>instream& Read(instream& is, CMyClass& my)
Sah>>{
Sah>>if(is.???? & ios::binary)
Sah>>{
Sah>>ReadFromBinary(is, my);
Sah>>}
Sah>>else
Sah>>{
Sah>>ReadFromText(is, my);
Sah>>}
Sah>>return is;
Sah>>}

S>Собственно, неплохо бы было уточнить, о каком это instream речь идет? В стандартной библиотеке C++, AFAIK, нет такого класса.


Конечно ifstream, извините за описку.
S>Если речь идет о std::ifstream, то, не завязываясь на детали реализации, насколько я знаю, тоже не узнаешь :-\

S>Да и вообще, суета это — самому \r\n в \n преобразовывать (а ничем другим binary от text вроде и не отличается). Открывай всегда в binary и не мучайся :))

Не только этим. А для вывода вообще это существенно.

Для меня это важно. Поведение объекта весьма отличается в том и в другом случае. :(
Ума не приложу, почему этого нет в fstream?

Спасибо за ответ.
Sergey.
Re[3]: Как узнать open_mode в открытом stream?
От: Аноним  
Дата: 23.04.02 09:05
Оценка:
Здравствуйте Sah, Вы писали:

Sah>Здравствуйте Sergey, Вы писали:


Sah>>>I want:

Sah>>>instream& Read(instream& is, CMyClass& my)
Sah>>>{
Sah>>>if(is.???? & ios::binary)
Sah>>>{
Sah>>>ReadFromBinary(is, my);
Sah>>>}
Sah>>>else
Sah>>>{
Sah>>>ReadFromText(is, my);
Sah>>>}
Sah>>>return is;
Sah>>>}

S>>Собственно, неплохо бы было уточнить, о каком это instream речь идет? В стандартной библиотеке C++, AFAIK, нет такого класса.


Sah>Конечно ifstream, извините за описку.

S>>Если речь идет о std::ifstream, то, не завязываясь на детали реализации, насколько я знаю, тоже не узнаешь :-\

S>>Да и вообще, суета это — самому \r\n в \n преобразовывать (а ничем другим binary от text вроде и не отличается). Открывай всегда в binary и не мучайся :))

Sah>Не только этим. А для вывода вообще это существенно.

Sah>Для меня это важно. Поведение объекта весьма отличается в том и в другом случае. :(

Sah>Ума не приложу, почему этого нет в fstream?

Sah>Спасибо за ответ.


Смотрим ifstream::set_mode

int setmode( int nMode = filebuf::text );

Return Value

The _previous mode_ :) ; –1 if the parameter is invalid, the file is not open, or the mode cannot be changed.

int nMode = is.set_mode();
is.set_mode( nMode );


В nMode то что тебе надо.
Re[4]: Как узнать open_mode в открытом stream?
От: Sergey Россия  
Дата: 23.04.02 09:19
Оценка:
Здравствуйте Аноним, Вы писали:

А>Смотрим ifstream::set_mode


А>
А>int setmode( int nMode = filebuf::text );
А>

А>Return Value

А>The _previous mode_ ; –1 if the parameter is invalid, the file is not open, or the mode cannot be changed.


А>
А>int nMode = is.set_mode();
А>is.set_mode( nMode ); 
А>


А>В nMode то что тебе надо.


Все просто замечательно, но у стандартного ifstream нет ни set_mode, ни setmode
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.