Example #1
0
        private static byte[] extractFiles(FileStream fs, ARCFilePart[] parts, Record record)
        {
            byte[] data = new byte[record.len_decomp];
            // strings[i] is filename
            // tocs[i] is ToC, references parts
            // bytes is references by parts

            //@tocs[i].data = new byte[tocs[i].len_decomp];

            int offDecomp = 0;

            for (int j = 0; j < record.num_parts; j = j + 1)
            {
                ARCFilePart part = parts[record.index + j];

                if (part.len_comp == part.len_decomp)
                {
                    // The file part is not compressed
                    byte[] bComp = new byte[part.len_comp];

                    // fs, offset, dest, 0, len
                    fs.Seek(part.offset, SeekOrigin.Begin);
                    fs.Read(bComp, 0, part.len_comp);


                    for (int k = 0; k < bComp.Length; k = k + 1)
                    {
                        data[k + offDecomp] = bComp[k];
                    }
                }
                else
                {
                    byte[] bComp = new byte[part.len_comp];
                    fs.Seek(part.offset, SeekOrigin.Begin);
                    fs.Read(bComp, 0, part.len_comp);

                    byte[] tmp = LZ4.LZ4Codec.Decode(bComp, 0, bComp.Length, part.len_decomp);
                    Array.Copy(tmp, 0, data, offDecomp, part.len_decomp);
                }

                offDecomp = offDecomp + part.len_decomp;
            }

            return(data);
        }
Example #2
0
        private ARCFilePart[] getFileParts(FileStream fs)
        {
            ARCFilePart[] parts = new ARCFilePart[header.rec_num];

            int offset = header.rec_offset;

            fs.Seek(offset, SeekOrigin.Begin);

            for (int i = 0; i < header.rec_num; i = i + 1)
            {
                ARCFilePart part = new ARCFilePart();

                part.offset     = IOHelper.ReadInteger(fs);
                part.len_comp   = IOHelper.ReadInteger(fs);
                part.len_decomp = IOHelper.ReadInteger(fs);

                parts[i] = part;
            }

            return(parts);
        }
Example #3
0
        private ARCFilePart[] getFileParts(byte[] bytes)
        {
            ARCFilePart[] parts = new ARCFilePart[header.rec_num];

            int offset = header.rec_offset;

            for (int i = 0; i < header.rec_num; i = i + 1)
            {
                ARCFilePart part = new ARCFilePart();

                part.offset = IOHelper.GetInt(bytes, offset);
                offset      = offset + 4;

                part.len_comp = IOHelper.GetInt(bytes, offset);
                offset        = offset + 4;

                part.len_decomp = IOHelper.GetInt(bytes, offset);
                offset          = offset + 4;

                parts[i] = part;
            }

            return(parts);
        }