Не читается большой файл в QByteArray (182111787 byte):
QByteArray arrfile = file.readAll();
Размер QByteArray получается 0. Пробовал так:
QFile file(puth);
if(!file.open(QIODevice::ReadWrite)) { qDebug() <<"Error open file";}
int len = file.size();
char buf[len]; //тут выскакивает ошибка возмжно лимит массива
QByteArray arr;
if(file.size()>8012) {
while (!file.atEnd()) {
int bl = file.read(buf, 8012);
//QByteArray qb= QByteArray::fromRawData(buf, sizeof(buf));
//arr.append(qb);
}
} else {
arr = file.readAll();
}
arr= QByteArray::fromRawData(buf, sizeof(buf));
qDebug() <<"prostofile=" <<file.size() <<"qb=" <<arr.size();
file.close();
При присвоении массива (char buf[len]) выскакивает ошибка, наверное есть какой нибудь лимит массива, видимо с QByteArray похожая проблема. Что можно с этим сделать? Мне этот файл надо передать через QTcpSocket вот так
pClientSocket->write(arrBlock);
Но походу такое не катит. Что теперь сделать, неужели передавать куски QByteArray этого файла, вызывая pClientSocket->flush(). Может я что то упустил.
вот такой конструкцией
char buf[len];
Вы выделяете память на стеке (о том, что это VLA, и будет работать только с gcc, я умолчу). Выделить на стеке больше 1 мегабайта задача еще та, обычно так просто нельзя (под линуксом это точно). Но потом все равно туда больше 8012 байт не читаете. (кстати, 0 и 9 попутали?).
Если этот файл нужно передать через сокет, то так и сделайте - читайте по 4-8 кб и отправляйте в сокет - не нужно пытаться вычитать весь файл, где то так:
while (1) {
QByteArray b = file.read(8*1024);
if (b.isEmpty()) break;
socket.write(b);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Почему вектор инициализируется рандомным значением? Константа ещё не успевает стать -1? Как тогда сделать правильно?
Необработанные исключения по адресу 0x00821CC9 в пexe: 0xC00000FD: Stack overflow (параметры: 0x00000000, 0x006E2000)
Заинтересовался либой LuaBindЧитаю доку, разбираю примеры
как закрыть окно браузера по его названию, а потом (если закрытие было) открыть ссылку/ярлык/батник?