проверки записи в stream'ы
От: Аноним  
Дата: 01.12.09 12:17
Оценка:
Итак, есть уже давно написанный код на С++, в котором есть куча функций записи в файл
разнообразных данных через станд. операторы 'stream <<' и перегруженные операторы << для
объектов классов, структур...
Везде подразумевалось что на вход таких функций приходит УЖЕ кем-то выше точки данного вызова
данной функции write() созданная ссылка на некий ofstream. И она целая и непорочная))))
И вот седня начальнику захотелось везде начать проверять статус записи в поток...
Типа я всегда хочу быть предупрежден, что запись невозможна, поломалась, исказилась....
И? вопрос а как делать то это??
После каждого оператора << проверять bad|good статус потока?? Я чихнусь ТАК код перетряхивать...
Проверять только в конце записи — в конце всех опять таки что ли?? функций write() — этот же статус?
Но ИМХО этого уже мало будет. Сломаться то запись могла и посередине работы функции...
или что? Есть идеи?
Re: проверки записи в stream'ы
От: MT-Wizard Украина  
Дата: 01.12.09 12:20
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Итак, есть уже давно написанный код на С++, в котором есть куча функций записи в файл

А>...
А>Есть идеи?

stream::exceptions()
А ти, москалику, вже приїхав (с)
Re[2]: проверки записи в stream'ы
От: DestinyChild  
Дата: 01.12.09 13:00
Оценка:
Здравствуйте, MT-Wizard, Вы писали:

MW>Здравствуйте, Аноним, Вы писали:


А>>Итак, есть уже давно написанный код на С++, в котором есть куча функций записи в файл

А>>...
А>>Есть идеи?

MW>stream::exceptions()


слишком глобально.
Что, предлагаете в main поставить try catch на эти exceptions??
А в самих write функциях что?
Пример..
От босса)))))

write(){
cout << "A"
cout << "Я"
cout << "тут"
cout << "был,"
cout << "мед"
cout << "пиво"
cout << "пил"
cout << "по усам"
cout << "текло"
......
}

если вдруг 'cout << "пиво"' породит типа stream::exceptions() — то тутже выходить из write()
со словами "Ой, пардон при записи в поток cout произошла ошибка = <ТУТсамаОшибка>"
А что в вашем случае??? Поймаем в main'e эту фигню?? Я думаю врядли...

P.S. gcc 3.2.3
Re[2]: проверки записи в stream'ы
От: DestinyChild  
Дата: 01.12.09 14:22
Оценка:
доуточню — Вы про это?

http://www.cplusplus.com/reference/iostream/ios/exceptions/
Re[3]: проверки записи в stream'ы
От: MT-Wizard Украина  
Дата: 01.12.09 20:36
Оценка:
Здравствуйте, DestinyChild, Вы писали:

DC>доуточню — Вы про это?


DC>http://www.cplusplus.com/reference/iostream/ios/exceptions/


Именно.
А ти, москалику, вже приїхав (с)
Re: проверки записи в stream'ы
От: Pavel Dvorkin Россия  
Дата: 02.12.09 08:02
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И? вопрос а как делать то это??

А>После каждого оператора << проверять bad|good статус потока?? Я чихнусь ТАК код перетряхивать...
А>Проверять только в конце записи — в конце всех опять таки что ли?? функций write() — этот же статус?
А>Но ИМХО этого уже мало будет. Сломаться то запись могла и посередине работы функции...
А>или что? Есть идеи?

Предложу вот такое



using namespace std;

class MyStream : public ofstream
{
};

template <class T>
MyStream& operator<<(MyStream& os, T& t)
{
    ((ofstream&)os) << t;
    // и здесь проверяем
    return os;
}


int _tmain(int argc, _TCHAR* argv[])
{
    MyStream o;
    o.open("E:\\888\\a.dat");
    int x = 10;
    o << x;
    float f = 3.14f;
    o << f;
    o.close();
    return 0;
}
With best regards
Pavel Dvorkin
Re[3]: проверки записи в stream'ы
От: gear nuke  
Дата: 25.12.09 10:58
Оценка:
Здравствуйте, DestinyChild, Вы писали:

DC>Пример..

DC>От босса)))))

DC>write(){

DC>cout << "A"
DC>cout << "Я"
DC>cout << "тут"
DC>cout << "был,"
DC>cout << "мед"
DC>cout << "пиво"
DC>cout << "пил"
DC>cout << "по усам"
DC>cout << "текло"
DC>......
DC>}

DC>если вдруг 'cout << "пиво"' породит типа stream::exceptions() — то тутже выходить из write()

DC>со словами "Ой, пардон при записи в поток cout произошла ошибка = <ТУТсамаОшибка>"
DC>А что в вашем случае??? Поймаем в main'e эту фигню?? Я думаю врядли...

Обясните боссу, что в случае с cout, успешное выполнение operator<< не говорит о том, что данные действительно были выведены в консоль.
.
People who are more than casually interested in computers should have at least some idea of what the underlying hardware is like. Otherwise the programs they write will be pretty weird (c) D.Knuth
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.