Название: Вопрос про QFile::write() Отправлено: alex12 от Апрель 15, 2009, 21:43 Всем привет!
Меня давно мучает вопрос: Делаю запись в файл. Должен ли я ВСЕГДА делать вот так: Код: while( len ) { или можно не заморачиваться: Код: file.write( ptr, len ); и забить на проверку количества реально записанных байт? В реальной жизни никогда не видел ошибок, если, конечно, не писать по 1GB за раз. Есть ли практический смысл в постоянной проверке реально записанных байт? Название: Re: Вопрос про QFile::write() Отправлено: Пантер от Апрель 15, 2009, 21:54 А если место на диске закончилось?
Название: Re: Вопрос про QFile::write() Отправлено: lit-uriy от Апрель 15, 2009, 22:04 а зачем цикл?
Пытайся записать всё, проверь, если неполучилось, скажи об этом пользователю. Название: Re: Вопрос про QFile::write() Отправлено: whirlwind от Апрель 15, 2009, 22:05 не уверен, но по-моему, в linux'е запросто можно удалить файл, пока вы в него пишете.
Название: Re: Вопрос про QFile::write() Отправлено: pastor от Апрель 15, 2009, 22:08 и забить на проверку количества реально записанных байт? Забивать на проверку нестоит Название: Re: Вопрос про QFile::write() Отправлено: Пантер от Апрель 15, 2009, 22:21 не уверен, но по-моему, в linux'е запросто можно удалить файл, пока вы в него пишете. Файл не будет удален, пока не закроется последний дескриптор. Т.е. писать в него можно будет, но при close() он исчезнет.Название: Re: Вопрос про QFile::write() Отправлено: alex12 от Апрель 15, 2009, 22:57 По-моему тут возможны несколько вариантов:
Случай в) не рассматриваем ибо тут все понятно. Вопрос в том, как себя ведет QFile? По вариану а) или б)? Вот, например, QTcpSocket ведет себя по сценарию б). Если нужно отправить много данных, то нужно обязательно следить сколько байт ушло в линию. С сделал простенький тест. Записываю оооочень большой файл блоками разной длины и в случае чего вывожу на консоль. Так вот, практика показывает, что я не смог получить ни разу ситуации б). Всегда все работает по а). Система WinXP MinGW Qt 4.5.0. Есть ли теоретическое обоснование этого факта? Как обстоят дела на других платформах? Код: #include <QtCore> Название: Re: Вопрос про QFile::write() Отправлено: Пантер от Апрель 15, 2009, 23:01 На сколько я знаю, варианта Б не может быть как такового - или записано все, или ничего.
Название: Re: Вопрос про QFile::write() Отправлено: Alex Custov от Апрель 16, 2009, 01:55 +
http://www.linux.org.ru/view-message.jsp?msgid=3591104&lastmod=1238980775134 Название: Re: Вопрос про QFile::write() Отправлено: mugabe от Апрель 16, 2009, 04:29 qfsfileengine_win.cpp:
Код
qfsfileengine.cpp: Код
делать первым способом не только не обязательно, но и вредно. если, конечно, не собираетесь отслеживать процесс записи в файл. Название: Re: Вопрос про QFile::write() Отправлено: alex12 от Апрель 16, 2009, 11:07 qfsfileengine_win.cpp: Код qfsfileengine.cpp: Код ... делать первым способом не только не обязательно, но и вредно. если, конечно, не собираетесь отслеживать процесс записи в файл. Спасибо. Теперь все понятно. QFile гарантирует запись всех данных и сам делает циклическую запись. Жаль, что этого нигде не написано явно в документации. Или я просто не нашел... |