public byte[] Write(int CompressionLevel) { byte[] buffer = new byte[compressedxsize]; MemoryStream msb = new MemoryStream(buffer); BinaryWriter bw = new BinaryWriter(msb); byte[] dataxacsdfile = Encoding.GetEncoding("GB2312").GetBytes(filePath.Replace("/", "\\")); bw.Write(dataxacsdfile); if (this.version > 2) { bw.BaseStream.Seek(260, SeekOrigin.Begin); bw.Write(other != null ? other : new byte[4] { 0, 0, 0, 0 }); bw.Write(fileoffset); bw.Write(decompressedSize); bw.Write(compressedSize); bw.Write(0); bw.BaseStream.Seek(0, SeekOrigin.Begin); bw.Close(); } else { bw.BaseStream.Seek(260, SeekOrigin.Begin); bw.Write((uint)fileoffset); bw.Write(decompressedSize); bw.Write(compressedSize); bw.Write(0); bw.BaseStream.Seek(0, SeekOrigin.Begin); bw.Close(); } byte[] compressed = PCKZlib.Compress(buffer, CompressionLevel); return(compressed.Length < compressedxsize ? compressed : buffer); }
public void Read(byte[] bytes) { if (bytes.Length < compressedxsize) { bytes = PCKZlib.Decompress(bytes, compressedxsize); } BinaryReader br = new BinaryReader(new MemoryStream(bytes)); filePath = Encoding.GetEncoding("GB2312").GetString(br.ReadBytes(260)).Split(new string[] { "\0" }, StringSplitOptions.RemoveEmptyEntries)[0].Replace("/", "\\"); fullP = string.Empty; if (this.version > 2) { other = br.ReadBytes(4); fileoffset = br.ReadInt64(); } else { fileoffset = br.ReadUInt32(); } decompressedSize = br.ReadInt32(); compressedSize = br.ReadInt32(); br.Close(); }