![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
++Norton++ |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 98 Регистрация: 5.10.2008 Пользователь №: 380 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Есть функция, которая выполняет запись в файл:
Дело в том, что при ее первом вызове, все работает нормально. Если следом ее вызвать второй раз, она просто создает пустой файл (т.е. пробрасывает стадию while(!in.atEnd)). Что может быть не так?
Причина редактирования: форматирование понагляднее и скобка потерялась
|
|
|
![]() |
Tonal |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 452 Регистрация: 6.12.2007 Из: Новосибирск Пользователь №: 34 Спасибо сказали: 69 раз(а) Репутация: ![]() ![]() ![]() |
2 ++Norton++ В твоём примере с cat-ами работают 2 программы: cat и шел.
когда ты запускаешь cat, шел открывает для него поток ввода. При нажатии Ctrl+D шел закрывает поток ввода для текущей запущенной программы. cat ловит это как конец файла и завершается. При повторном вызове cat-а, всё повторяется. Т.е. если ты хочешь воспроизвести это поведение, тебе нужно или напрямую управлять терминалом и самому ловить Ctrl+D (по умолчанию его ловит шел), либо придумать какой-нибудь другой признак окончания ввода файла. Например это может быт строка "EOF". Тогда твоя функция пишет файл, пока не считала эту спец.строку или конец файла. Если считала конец файла - всё, если считала спец.строку - можно ещё раз запуститься и читать дальше. П.С. На винде аналогом Ctrl+D является Ctrl+Z П.П.С. По моему к Qt тема имеет весьма слабое отношение. Ей в "Техника программирования" место, или в "Другое". ![]() Сообщение отредактировал Tonal - 13.10.2008, 7:55 |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 20.6.2025, 17:23 |