У меня есть некоторый код, который загружает 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-файла.
У кого-либо есть какие-либо идеи, почему это могло бы происходить?
В итоге я использовал исполняемый файл gzip для распаковки вместо GZipStream. По какой-то причине он не может обработать файл, но исполняемый файл может.
РЕДАКТИРОВАТЬ
Старайтесь не оставлять GZipStream открытым:
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress,
false);
или
GZipStream gzipStream = new GZipStream(fileInput, CompressionMode.Decompress);
Вызываете ли вы Close
или Flush
на fileOutput
? (Или просто оберните его в using
, что рекомендуется делать). Если вы этого не сделаете, файл может быть не смыт на диск при завершении программы.