Проблема с распаковкой, GZipStream

У меня проблема с распаковкой gzip:

string fileData = string.Empty;
// byte[] starts with 31 and 139
var gzBuffer = entity.Data.Skip(pos).ToArray(); 
using (GZipStream stream = new GZipStream(new MemoryStream(gzBuffer),CompressionMode.Decompress))
{
    const int size = 4096;
    byte[] buffer = new byte[size];
    using (MemoryStream memory = new MemoryStream())
    {
        int count = 0;
        do
        {
            count = stream.Read(buffer, 0, size);
            if (count > 0)
            {
                memory.Write(buffer, 0, count);
            }
        } while (count > 0);
        fileData = Encoding.UTF8.GetString(memory.ToArray());
    }
}

В отладчике count всегда равно 0. В чем проблема?
Спасибо.


person user348173    schedule 15.05.2011    source источник
comment
Как был сжат этот поток? Я тоже сталкивался с этой проблемой в прошлом, и на самом деле ошибка заключалась в логике сжатия.   -  person Jan-Peter Vos    schedule 15.05.2011
comment
ты проверял gzbuffer? Может, там пусто.   -  person Saleh    schedule 15.05.2011
comment
@ Ян-Питер Вос: Я не могу сказать наверняка, потому что сообщение пришло из Интернета.   -  person user348173    schedule 15.05.2011
comment
@LightWing: да, я проверял. он содержит данные   -  person user348173    schedule 15.05.2011
comment
Хммм ... Я не вижу ничего очевидного ... данные - это первое, что приходит в голову. Вы можете (например) показать, что такое gzBuffer?   -  person Marc Gravell    schedule 15.05.2011
comment
Если вы имеете в виду, что count после цикла равен 0, так и должно быть. Я думаю, вам лучше передать fileData в конструктор памяти. Сделайте это. и скажи мне результат.   -  person Saleh    schedule 15.05.2011


Ответы (1)


не уверен, что это поможет вам, но я постараюсь. Это то, что я использовал в примере проекта для сжатия / распаковки файлов с помощью GZIP. Может быть, вы сможете адаптировать этот код под свои нужды?

public string Compress(FileInfo fi)
{
    string outPath;

    using (FileStream inFile = fi.OpenRead())
    {
        outPath = fi.FullName + ".gz";
        using (FileStream outFile = File.Create(outPath))
        {
            using (var compress = new GZipStream(outFile, 
                                                 CompressionMode.Compress))
            {
                inFile.CopyTo(compress);
            }
        }
    }

    return outPath;
}

public void Decompress(FileInfo fi)
{
    using (FileStream inFile = fi.OpenRead())
    {
        string curFile = fi.FullName;
        string origName = curFile.Remove(curFile.Length - fi.Extension.Length);

        using (FileStream outFile = File.Create(origName))
        {
            using (var decompress = new GZipStream(inFile, 
                                                   CompressionMode.Decompress))
            {
                decompress.CopyTo(outFile);
            }
        }
    }
}
person oleksii    schedule 15.05.2011