C# 解压Android备份(adb)文件
我正在尝试使用该算法解压缩Android adb文件。我尝试过NetZips-Ionic-Zlib以及Net4.5中引入的微软内置软件,但这两种软件都会导致归档文件损坏。它们都有完全相同的文件大小,但哈希值在损坏的和良好的归档文件之间不匹配 我使用下面的代码来解压C# 解压Android备份(adb)文件,c#,android,adb,archive,zlib,C#,Android,Adb,Archive,Zlib,我正在尝试使用该算法解压缩Android adb文件。我尝试过NetZips-Ionic-Zlib以及Net4.5中引入的微软内置软件,但这两种软件都会导致归档文件损坏。它们都有完全相同的文件大小,但哈希值在损坏的和良好的归档文件之间不匹配 我使用下面的代码来解压 byte[]app=File.ReadAllBytes(tb_keyOutDir.Text+“\\app_stripped.ab”); MemoryStream ms=新的MemoryStream(应用程序); //跳过前两个字节以避
byte[]app=File.ReadAllBytes(tb_keyOutDir.Text+“\\app_stripped.ab”);
MemoryStream ms=新的MemoryStream(应用程序);
//跳过前两个字节以避免无效的块长度错误
Seek女士(2,SeekOrigin.Begin);
DeflateStream deflate=新的DeflateStream(毫秒,压缩模式。解压缩);
string dec=new StreamReader(deflate,Encoding.ASCII).ReadToEnd();
File.writealText(tb_keyOutDir.Text+“\\app.tar”,dec);
我可以用OpenSSL通过CygWin解压它,它正在正确地解压,这样我就知道我的文件没有损坏或任何东西
cat app_stripped.ab | openssl zlib -d > app.tar
使用离子库
尝试使用此方法解压缩:
public static byte[] Decompress(byte[] gzip) {
using (var stream = new Ionic.Zlib.ZlibStream(new MemoryStream(gzip), Ionic.Zlib.CompressionMode.Decompress)) {
const int size = 1024;
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);
return memory.ToArray();
}
}
}
当你想打电话时:
byte[] app = Decompress(File.ReadAllBytes(tb_keyOutDir.Text + "\\app_stripped.ab"));
File.WriteAllBytes(tb_keyOutDir.Text + "\\app.tar", app);
谢谢你,这就成功了!由于我们现在写的是字节而不是文本,所以我对您的答案进行了轻微的编辑。