コード例 #1
0
        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);
        }
コード例 #2
0
        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();
        }