Не читается большой файл в 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);
}
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости