public Stream OpenSubFile(int i) { bffilerecord record = GetFileRecord(i); mStream.Position = record.fileOffset; var stream = new BufferedStream(mStream, (int)record.fileSize); stream.SetLength(record.fileSize); return(stream); }
public FileStream ExtractFile(int i, string targetPath, int offset = 0) { bffilerecord record = GetFileRecord(i); mStream.Position = record.fileOffset + offset; var stream = new FileStream(targetPath, FileMode.CreateNew); // Buffered transfer contents over byte [] buffer = new byte[1024]; while (mStream.Position < record.fileOffset + record.fileSize) { long fileEnd = record.fileOffset + record.fileSize; long numBytes = fileEnd - mStream.Position < 1024 ? fileEnd - mStream.Position : 1024; mStream.Read(buffer, 0, (int)numBytes); stream.Write(buffer, 0, (int)numBytes); } return(stream); }