Example #1
0
        public static PboFile FromStream(Stream input, PboLoadMode mode = PboLoadMode.Immediate)
        {
            var pbo = new PboFile();

            while (input.Position < input.Length)
            {
                var e = new PboEntry();
                e.ReadHeader(input);
                if (e.Path.Length == 0)
                {
                    if (pbo._entries.Count != 0)
                    {
                        //this is the end of header marker
                        break;
                    }
                    //this is a header extension so slurp up strings
                    while (BinaryFile.ReadString(input).Length != 0)
                    {
                    }
                    //System.Console.WriteLine("skipping " + config); ;
                }
                else
                {
                    pbo._entries.Add(e);
                }
            }
            foreach (var pf in pbo)
            {
                pf.ReadBody(input, -1, mode);
            }
            return(pbo);
        }
Example #2
0
        public static PboFile FromPbo(string fileName, PboLoadMode mode = PboLoadMode.Immediate)
        {
            var fs  = File.OpenRead(fileName);
            var pbo = FromStream(fs, mode);

            if (mode == PboLoadMode.Immediate)
            {
                fs.Close();
            }
            pbo.FileName      = System.IO.Path.GetFileName(fileName);
            pbo._sourceFolder = System.IO.Path.GetDirectoryName(fileName);
            return(pbo);
        }
Example #3
0
        /*
         * Internal function used to read the actual file contents of a PboEntry from a stream
         */

        internal void ReadBody(Stream sr, long offset, PboLoadMode mode)
        {
            if (offset < 0)
            {
                offset = sr.Position;
            }
            if (mode == PboLoadMode.Immediate)
            {
                FileContents = new byte[DataSize];
                sr.Seek(offset, SeekOrigin.Begin);
                sr.Read(FileContents, 0, DataSize);
            }
            else
            {
                //save the position and skip past
                _input  = sr;
                _offset = offset;
                sr.Seek(DataSize, SeekOrigin.Current);
            }
        }
Example #4
0
        /*
         * Internal function used to read the actual file contents of a PboEntry from a stream
         */

        internal void ReadBody(Stream sr, long offset, PboLoadMode mode) {
            if (offset < 0)
                offset = sr.Position;
            if (mode == PboLoadMode.Immediate) {
                FileContents = new byte[DataSize];
                sr.Seek(offset, SeekOrigin.Begin);
                sr.Read(FileContents, 0, DataSize);
            } else {
                //save the position and skip past
                _input = sr;
                _offset = offset;
                sr.Seek(DataSize, SeekOrigin.Current);
            }
        }