Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Проблема с ifstream


Автор: commoner 17.11.2006, 09:46
Привет всем.
У меня такой вопрос. Почему после определенного количества обращений к объекту ifstream он перестает работать. Не реагируют никакие  операторы.
И это не зависит от количества обращений к файлу.
Бьюсь над этим вопросом второй день. помогите кто сможет. 

Автор: Daevaorn 17.11.2006, 10:01
commoner, 
Показывай код. Чудес не бывает.

Автор: En_t_end 17.11.2006, 10:05
commoner, 
::clear ?

Автор: albertn 17.11.2006, 16:37
commoner, У меня такое уже было. Все оказалось, что происходила толи ошибка чтения, толи входной поток закончился и он полностью переставал работать.

Автор: commoner 17.11.2006, 17:48
Код

//открываю так , кстати file объявляется в public: моего класса.
ifstream file("***.***")
//далее идут функции где используется объект file
// очень часто  в разных функциях можно увидеть циклы типа:
char tempStr[100];
file.seekg(0);
for (int i=1;i<=COUNT_OBJECTS;i++)
{
     do
     {file>>tempStr;}
      while(условие нахождения определенного слова в файле);
//
}

    Итак таких циклов у меня штук 8;
    Могу сказать что если такой цикл запускается раз 16(сумма всех циклов во всех функциях) то все ок.
Если же больше то tempStr перестает принимать какиелибо значения.
И это не зависит от размера файла. т.е не зависит от использования >> оператора.
     Вопрос все еще открыт.

Автор: JackYF 17.11.2006, 17:54
Ты пробовал, как предлагал En_t_end - перед каждым seekg делать clear() ?

Автор: albertn 17.11.2006, 17:56
Лично я отказался от использования потоков, т.к. родные функции дают больше свободы (имхо).
В программе есть проверка на исчерпывание файла?
Можешь ли ты горантировать, что полученная строка будет вдлину меньше 100 символов?

А вообще данный код мог бы и не приводить, т.к.он ни о чем не говорит. Приведи полный код программы, или обрежь все лишнее, чтобы было видно что ты делаешь.

Автор: JackYF 17.11.2006, 18:10
Цитата(albertn @  17.11.2006,  17:56 Найти цитируемый пост)
Лично я отказался от использования потоков, т.к. родные функции дают больше свободы (имхо).


По моим наблюдениям, потоки могут давать некоторые временные задержки в критических случаях..., а вот чего в функциональности потоков нету такого, что было в родных функциях - albertn, приведи пример.


Автор: zabivator 17.11.2006, 18:28
Цитата(commoner @ 17.11.2006,  17:48)
Код

     do
     {file>>tempStr;}
      while(условие нахождения определенного слова в файле);


А если поток закончиться раньше, чем будет найдено слово?

Автор: commoner 17.11.2006, 19:02
После определенного момента tempStr вообще не принимает ничего, только tempStr[0] принимает значение 0.
не помогает даже закрытие и открытие файла!  smile 
   такое ощущение что ifstream просто вырубается. (странно звучит)

Автор: JackYF 17.11.2006, 19:06
commoner, в третий раз спрашиваю - clear() поставил?

Автор: commoner 17.11.2006, 20:46
да поставил, не помогло. smile

Автор: albertn 18.11.2006, 15:09
Цитата(JackYF @  17.11.2006,  18:10 Найти цитируемый пост)
По моим наблюдениям, потоки могут давать некоторые временные задержки в критических случаях..., а вот чего в функциональности потоков нету такого, что было в родных функциях - albertn, приведи пример.
В функциональности разницы практически никакой. Разница будет заключаться в ктом, какое количество символов придется написать чтобы сделать то или иное действие. Для простых выводов вполне приемлимо, а если надо вывести форматированный вывод, то столько всего надо написать, и еще включить дополнительный модуль!
К тому-же форматированный ввод-вывод гораздо наглядней (опять же имхо)

Автор: Xenon 18.11.2006, 15:52
zabivator Ну просто впиши "условие && !file.eof()"

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)