Доброго времени суток!
Не так давно начал осваивать С++ и столкнулся с проблемой. Необходимо разархивировать довольно большое число файлов *.GZ. В связи с этим облазил интернет, нашел библиотеку zlib.h, установил её через configure. И после компиляции, а именно g++ file.cpp -o file -lz получил первые результаты. На самом деле на это у меня ушёл чуть ли не весь день и сейчас задача разархивировать хотя бы 1 файл совсем поставила меня в тупик.
Дело в том, что большинство примеров, которые приводятся на просторах интернета не работали, а один из них выдавал ошибку, мол формат не верный. Это странно, в конце концов эти файлы были получены непосредственно с noaa, поэтому в правильности формата я уверен на все 100%. Например в баше через gunzip они распаковываются на ура.
Собственно нашёл небольшой, в сравнении с остальными, кусочек кода, но он работал. Вот только не так, как мне хотелось бы. Файл действительно стал заполняться информацией, но вместо ожидаемых 2.2 мб, я получал на выходе 14,2 Кб. Так как в языке я совсем не силен, то прошу указать мне, в чем же моя ошибка и как мне получить желаемый результат? Внутри архива находится бинарный файл.
#include "zlib.h"
#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <fcntl.h>
const static int KILOB = 16384;
using namespace std;
int main(int argc, char **argv)
{
char cb[KILOB];
string arch = "/home/cat/Projects/selection_l1b_format_noaa/TEMP/NSS.AMAX.NK.D11172.S2050.E2244.B6813941.GC.gz";
FILE *outfile = fopen("/home/cat/Projects/selection_l1b_format_noaa/TEMP/AMAX.GC", "wb");
gzFile gfile = gzopen(arch.c_str(), "rb");
int len = 0;
int count = 0;
do
{
len = gzread(gfile, cb, KILOB);
if (len < KILOB)
cb[len] = 0;
count++;
cout<<"len="<<len<< " # "<<count <<endl;
fprintf(outfile, "%s", cb);
} while (len == KILOB);
fclose(outfile);
gzclose(gfile);
}
Если это имеет значение,то моя система Linux Mint 19.1 Код пишу в VSCode, компилятор gcc. И судя по всему я не пользуюсь Qt.
Возможно ли в теории на этапе компиляции обнаружить некорректное преобразование объекта одного класса в объект другого?