Nanook.QueenBee.Parser.PakEditor.ExtractFile C# (CSharp) Method

ExtractFile() public method

public ExtractFile ( string qbFilename, Stream stream ) : void
qbFilename string
stream Stream
return void
        public void ExtractFile(string qbFilename, Stream stream)
        {
            //open input pak
            string fname;
            long offset;

            if (_pakHeaders.ContainsKey(qbFilename.ToLower()))
            {
                PakHeaderItem phi = _pakHeaders[qbFilename.ToLower()];
                //open output
                if (_debugFile)
                {
                    fname = _pakFormat.FullDebugFilename;
                    offset = phi.HeaderStart + phi.FileOffset;
                }
                else if (_requiresPab)
                {
                    fname = _pakFormat.FullPabFilename;
                    offset = (phi.HeaderStart + phi.FileOffset) - (new FileInfo(_pakFormat.FullPakFilename)).Length;
                }
                else
                {
                    fname = _pakFormat.FullPakFilename;
                    offset = phi.HeaderStart + phi.FileOffset;
                }

                using (BinaryWriter bw = new BinaryWriter(stream))
                {
                    //open input pak
                    using (FileStream fsPak = File.Open(fname, FileMode.Open, FileAccess.ReadWrite))
                    {
                        if ((offset + phi.FileLength) - 1 > fsPak.Length)
                            throw new ApplicationException(string.Format("End of file '{0}' is located at 0x{1} which is beyond the PAK/PAB size 0x{2}", qbFilename, (offset + phi.FileLength).ToString("X").PadLeft(8, '0'), fsPak.Length.ToString("X").PadLeft(8, '0')));

                        using (BinaryReader brPak = new BinaryReader(fsPak))
                        {
                            fsPak.Seek(offset, SeekOrigin.Begin);
                            copyData(fsPak, stream, (long)phi.FileLength);
                        }
                    }
                }
            }
            else
                throw new ApplicationException(string.Format("'{0}' does not exist in '{1}'", qbFilename, _pakFilename));
        }

Same methods

PakEditor::ExtractFile ( string qbFilename, string filename ) : void