예제 #1
0
        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);
        }
예제 #2
0
        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);
        }