У меня возникла очень простая, но неприятная проблема, и я не могу найти ответ в Интернете. Надеюсь, ты сможешь указать мне, что я сделал не так.
Я пытаюсь декодировать объект из репозитория 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
.
Любая идея будет принята с благодарностью!