Декодирование объектов git / ошибка «Длина блока не совпадает с его дополнением»

У меня возникла очень простая, но неприятная проблема, и я не могу найти ответ в Интернете. Надеюсь, ты сможешь указать мне, что я сделал не так.

Я пытаюсь декодировать объект из репозитория Git. Согласно ProGit , имя файла и его содержимое были сброшены во время фиксации.

Я использую C # для чтения объекта, указанного SHA1, в поток, его расширения и преобразования в байтовый массив. Вот код:

using System.IO.Compression;

static internal byte[] GetObjectBySha(string storagePath, string sha)
{
    string filePath = Path.Combine(storagePath, "objects", sha.Substring(0, 2), sha.Substring(2, 38));
    byte[] fileContent = null;

    using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read))
    {
        using (MemoryStream ms = new MemoryStream())
        {
            using (DeflateStream gs = new DeflateStream(fs, CompressionMode.Decompress))
            {
                gs.CopyTo(ms);
            }

            fileContent = ms.ToArray();
        }
    }

    return fileContent;
}

Когда достигается gs.CopyTo (ms); , возникает ошибка времени выполнения: Длина блока не совпадает с его дополнением.

Почему так?

Что касается содержимого файла, который я пытаюсь прочитать ... Он двоичный и был создан исполняемым файлом git. Исходное имя файла - testfile.txt , его содержимое - Образец текста. SHA1 - это 51d0be227ecdc0039698122a1513421ce35c1dbe .

Любая идея будет принята с благодарностью!

5
задан shytikov 2 December 2011 в 10:24
поделиться