decodingagitobject/"blocklengthdoesnotmatchitscomplement"error在网上找答案就可以了。希望你能指出我,我做错了什么。我正在尝试解码Git存储库中的对象。根据ProGit,文件名及其内容在提交期间被缩小。我正在使用C#将SHA1指示的对象读取到流中,将其膨胀并将其转换为字节数组。这是代码:使用System.IO.Compression;staticinternalbyte[]GetObjectBySha(stringstoragePath,stringsha){stringfilePath=Path.Combine(storagePath,"objects",sha.Substring(0,2),sha.Substring(2,38));}byte[]文件内容=空;使用(FileStreamfs=newFileStream(filePath,FileMode.Open,FileAccess.Read)){使用(MemoryStreamms=newMemoryStream()){使用(DeflateStreamgs=newDeflateStream(fs,CompressionMode.Decompress)){gs.CopyTo(多发性硬化症);}fileContent=ms.ToArray();}}返回文件内容;gs.CopyTo(ms);时发生运行时错误;已达到:块长度与其补码不匹配。为什么会这样?关于我正在尝试读取的文件的一些信息...它是二进制文件,由git可执行文件创建。原文件名为testfile.txt,内容为Sampletext。SHA1是51d0be227ecdc0039698122a1513421ce35c1dbe。任何想法将不胜感激!DeflateStream和zlib是两个不同的东西,如这个答案中所解释的:.NET基类库中没有ZlibStream-没有任何东西可以生成或使用ZLIB,所以你需要的是ZLIB使用者。DotNetZip库提供了一个:staticinternalbyte[]GetObjectBySha(stringstoragePath,stringsha){stringfilePath=Path.Combine(storagePath,"objects",sha.Substring(0,2),sha.Substring(2,38));byte[]compressed=File.ReadAllBytes(filePath);返回Ionic.Zlib.ZlibStream.UncompressBuffer(压缩);ZLib是Deflate,带有一个额外的两字节标头、一个可选的“字典”和一个四字节校验和。根据您的应用程序-如果您知道不会有字典-您可以在通过DeflateStream运行数据之前切断数据的前两个字节和最后四个字节。这是一个肮脏的解决方案,但可以帮助您避免引入外部依赖项。以上就是C#学习教程的全部内容:解码git对象/“块长不匹配其补码”错误分享。如果对大家有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络合集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处:
