.NET使用压缩和未压缩数据压缩文件

.NET使用压缩和未压缩数据压缩文件,.net,deflate,.net,Deflate,在.NET中,我有一个文件,它有一个1024字节的(未压缩的)头信息块,后面是一个1MB的数据块,用Deflate压缩。如何仅解压缩数据块 我尝试以文件流的形式打开文件,跳过头,将其余部分写入MemoryStream,然后从MemoryStream创建deflatesttream对象并读取该对象,但我得到了一个“块长度与其补码不匹配”(这可能意味着“此数据未正确泄气”)异常 // FIn and FOut are input and output FileStreams, respectivel

在.NET中,我有一个文件,它有一个1024字节的(未压缩的)头信息块,后面是一个1MB的数据块,用Deflate压缩。如何仅解压缩数据块

我尝试以文件流的形式打开文件,跳过头,将其余部分写入MemoryStream,然后从MemoryStream创建deflatesttream对象并读取该对象,但我得到了一个“块长度与其补码不匹配”(这可能意味着“此数据未正确泄气”)异常

// FIn and FOut are input and output FileStreams, respectively
// UncompressedFileSize is the size of the uncompressed data

MemoryStream MS = new MemoryStream();
byte[] B = new byte[1048576];

// Skip the header, and read the data into the MemoryStream
FIn.Seek(1024, SeekOrigin.Begin);
FIn.Read(B, 0, 1048576);
MS.Write(B, 0, 1048576);

// Reset the MemoryStream, then feed it to a DeflateStream
MS.Seek(0L, SeekOrigin.Begin);
DeflateStream F = new DeflateStream(MS, CompressionMode.Decompress);
int BytesRemaining = UncompressedFileSize;
while (BytesRemaining > 0)
{
    int ReadSize = 1048576;
    if (ReadSize > BytesRemaining)
    {
        ReadSize = (int)BytesRemaining;
    }
    int BytesRead = F.Read(B, 0, ReadSize);
    FOut.Write(B, 0, BytesRead);
    BytesRemaining -= ReadSize;
}

没关系-结果是我试图解压缩的Zip文件有问题。该方法稍加修改(读取标题;读取数据块,并将其送入MemoryStream;重置MemoryStream的指针,然后读取它,将其送入DeflateStream,并使用DeflateStream的CopyTo方法将其写入输出文件流)可以工作