public void Parse(FileV8Reader fileV8Reader, V8FileSystem fileSystem, string output, int threads = 1) { foreach (var reference in fileSystem.References) { fileV8Reader.Seek(reference.RefToData, SeekOrigin.Begin); string path = output + reference.FileHeader.FileName; using (MemoryStream memStream = new MemoryStream()) { using (MemoryStream memReader = new MemoryStream(fileV8Reader.ReadBytes(fileV8Reader.ReadBlockHeader()))) { if (reference.IsInFlated) { using (DeflateStream deflateStream = new DeflateStream(memReader, CompressionMode.Decompress)) { deflateStream.CopyTo(memStream); } } else { memReader.CopyTo(memStream); } } if (fileV8Reader.IsV8FileSystem(memStream)) { if (!Directory.Exists(path)) { Directory.CreateDirectory(path); } memStream.Seek(0, SeekOrigin.Begin); using (FileV8Reader tmpV8Reader = new FileV8Reader(new BinaryReader(memStream, Encoding.Default, true))) { reference.Folder = tmpV8Reader.ReadV8FileSystem(false); Parse(tmpV8Reader, reference.Folder, path + "\\"); } } else { using (FileStream fileStream = File.Create(path)) { memStream.Seek(0, SeekOrigin.Begin); memStream.CopyTo(fileStream); } } } } }