2012-01-03 2 views
1

Как читать больше, чем 600mb файл в qt? Я пытаюсь прочитать файл, используя file.readAll(). Он работает с небольшими файлами. но он дает ошибку bad_alloc в больших файлах? что мне делать?Ошибка bad_allock при попытке прочитать большой файл в qt

+1

Укажите, на какой платформе вы делаете это. – unwind

+0

Могу ли я спросить, что произойдет, когда вы загрузите 600 МБ данных - я надеюсь, что это не для того, чтобы пользователь мог манипулировать или перемещаться, поскольку он, безусловно, будет безнадежно неэффективным для любого взаимодействия с пользователем. Проблемы, связанные с загрузкой больших файлов, почти всегда указывают на необходимость решения другой проблемы, чтобы предотвратить проникновение в более глубокое и глубокое отверстие с течением времени. Разделить и завоевать ... –

+0

Я использую Qt creator (C++). – zi0408

ответ

1

Не делайте этого.

Редко необходимо загружать огромный файл в память за одну операцию.

Вы не можете загружать эту информацию для навигации или манипулирования пользователем, поэтому, если я подозреваю, что вы просто являетесь посредником между файлом на диске и отправкой файла в другое место, используйте механизм, который рассматривает Qfile как QIODevice, а не полностью загружает его как QString или QByteArray.

Если вы (или ваши клиенты) находитесь в Windows с использованием 32-разрядной системы, но у вас может быть более 2 ГБ ОЗУ, вы можете быть в курсе опции компоновщика /LARGEADDRESSAWARE, которая позволит вам поддерживать адреса размером более 2 ГБ и которые могут также улучшить вашу ситуацию, если вы действительно не можете обойтись без загрузки файла в память.

+0

Hi Roger Attrill. На самом деле я хочу прочитать весь файл и загрузить его на сервер. Я пытаюсь разработать загрузчик (клиент к серверу). Я решил прочитать файл в кусках. Но QNetworkAccessManager не обеспечивает передачу пакетов. – zi0408

+0

[QNetworkAccessManager :: post] (http://developer.qt.nokia.com/doc/qt-4.8/qnetworkaccessmanager.html#post) имеет опцию QIODevice в дополнение к версии QByteArray - не следует избегать загрузки файл сначала? –

1

Рассмотрите возможность чтения файла в кусках, а не не сразу. Конечно, ваша цель состоит в том, чтобы отобразить весь файл в текстовом редакторе, и в этом случае его загрузка частично сложнее. Вы очень расплывчаты, поэтому трудно быть более конкретным.

2

Попробуйте добавить

QMAKE_LFLAGS += -Wl,--large-address-aware 

к вашим квартам про файл, от того, что я понимаю, что это позволит процессу накапливать больше памяти, чем 2 Гб.

+0

Да, но только на x64 Windows. И предполагается использование MinGW. – vsizikov

Смежные вопросы