Я пытаюсь сжать текстовый файл с QT:
QFile inFile("d:\\build\\Directories\\Debug\\files\\developer.txt");
bool open_file_result = inFile.open(QIODevice::ReadOnly);
QByteArray ba = inFile.readAll();
QFile file("d:\\build\\Directories\\Debug\\files\\developer.gz");
bool open_zip_result = file.open(QIODevice::WriteOnly);
QDataStream out(&file);
out << qCompress(ba);
file.close();
open_file_result
и open_zip_result
являются true
. Я также могу видеть zip файл (он также имеет размер, например 50 КБ), но я не могу его открыть. Я получаю следующую ошибку:
Архив находится в неизвестном формате или поврежден.
Что я делаю не так? Если у вас есть лучший/другой способ сжать текстовый файл, скажите, пожалуйста!
Существует разница между алгоритмом сжатия Zip и контейнером Zip. Вы смешиваете этих двух.
Вам нужно сделать некоторые исследования в формате контейнера Zip, которые помогут вам найти и извлечь заархивированный файл в контейнере Zip. Как только вы получите этот файл, вы можете применить qUncompress только к этому файлу.
Попробуйте взглянуть на QuaZip, который является библиотекой, написанной для этой цели.
QFile
, но знаю, что Windows нуждается в вас, чтобы открывать такие вещи вbinary
режиме. Есть ли способ сделать это сQFile
?qCompress
просто сжимает указанные данные и не записывает заголовок файла gz. Вы должны открыть любой gz-файл и проверить его заголовок на наличиеmagic
данных. И сравните с вашим сгенерированным.