2013-11-23 3 views
0

Я пытаюсь сжать текстовый файл с 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 КБ), но я не могу его открыть. Я получаю следующую ошибку:

The archive is either in unknown format or damaged.

Что я делаю неправильно? Если у вас есть лучший/другой способ сжать текстовый файл, скажите, пожалуйста!

+0

Я ничего не знаю о 'QFile' конкретно, но я знаю, что Windows требует, чтобы вы открывали такие вещи в режиме' binary'. Есть ли способ сделать это с помощью 'QFile'? –

+0

Возможно, 'qCompress' просто сжимает указанные данные и не пишет заголовок файла gz. Вы должны открыть любой из gz-файла и проверить его заголовок для некоторых «волшебных» данных. И сравните с вашим сгенерированным. – eraxillan

ответ

0

Существует разница между алгоритмом сжатия Zip и контейнером Zip. Вы смешиваете этих двух.

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

Посмотрите на QuaZip, который является библиотекой, которая была написана для этой цели.

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