У меня есть код ниже, чтобы перемещаться по списку папок и файлов в zip-архиве, создавая их по ходу (также создавая пути для файлов, если они еще не созданы).
Приложение вылетает при использовании readData(char*, qint64)
извлекать данные из внутренних файлов для потоковой передачи в QFile
, Я не думаю, что это правильная вещь для использования, но это все, что я видел (в очень свободном примере на этом сайте), и мне также пришлось изменить QuaZipFile.h, чтобы сделать функцию общедоступной, чтобы я мог ее использовать ( также намекает, что я не должен его использовать).
Он не падает на первый файл, который не имеет содержимого, но делает после этого. Вот необходимый код (спросите, хотите ли вы увидеть больше):
QFile newFile(fNames);
newFile.open(QIODevice::WriteOnly);
QTextStream outToFile(&newFile);
char * data;
int len = file.readData(data, 100000000);
if(len > 0) {
outToFile << data;
}
newFile.close();
Это не проходит int len
линия. Что я должен использовать здесь?
Обратите внимание, что файл переменной определен ранее довольно примерно так:
QuaZip zip("zip.zip");
QuaZipFile file(&zip);
...
zip.goToFirstFile();
...
zip.goToNextFile();
И int, передаваемый readData, является случайным числом для максимального размера данных.
Причина сбоя заключается в том, что вы не выделили память для буфера с именем data
,
Решаемые.
Я попытался использовать различные операции чтения (readData, read, readLine) и обнаружил, что эта строка работает без необходимости в буфере данных:
outToFile << file.readAll();