GZipStream, не читая целый файл

У меня есть некоторый код, который загружает gzipped файлы и распаковывает их. Проблема, я не могу заставить ее распаковывать целый файл, она только читает первые 4 096 байтов и затем еще приблизительно 500.

Byte[] buffer = new Byte[4096];
int count = 0;
FileStream fileInput = new FileStream("input.gzip", FileMode.Open, FileAccess.Read, FileShare.Read);
FileStream fileOutput = new FileStream("output.dat", FileMode.Create, FileAccess.Write, FileShare.None);
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress, true);

// Read from gzip steam
while ((count = gzipStream.Read(buffer, 0, buffer.Length)) > 0)
{
    // Write to output file
    fileOutput.Write(buffer, 0, count);
}

// Close the streams
...

Я проверил загруженный файл; это - 13 МБ при сжатии и содержании одного XML-файла. Я вручную распаковал XML-файл, и содержание - все там. Но когда я делаю это с этим кодом, это только производит самое начало XML-файла.

У кого-либо есть какие-либо идеи, почему это могло бы происходить?

8
задан Edgar 18 June 2010 в 09:06
поделиться

3 ответа

В итоге я использовал исполняемый файл gzip для распаковки вместо GZipStream. По какой-то причине он не может обработать файл, но исполняемый файл может.

1
ответ дан 5 December 2019 в 22:16
поделиться

РЕДАКТИРОВАТЬ

Старайтесь не оставлять GZipStream открытым:

GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress,  
                                                                         false);

или

GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress);
4
ответ дан 5 December 2019 в 22:16
поделиться

Вызываете ли вы Close или Flush на fileOutput? (Или просто оберните его в using, что рекомендуется делать). Если вы этого не сделаете, файл может быть не смыт на диск при завершении программы.

0
ответ дан 5 December 2019 в 22:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: