Exemplo n.º 1
0
        public bool Open(Stream fs)
        {
            fs.Seek(0, SeekOrigin.Begin);

            Header = MarshalUtil.ReadStruct <DARCHeader>(fs);


            fs.Seek(Header.FileTableOffset + 8, SeekOrigin.Begin);
            var fileCount = fs.ReadByte();

            fs.Seek(Header.FileTableOffset, SeekOrigin.Begin);

            while (fileCount > 0)
            {
                var entry = MarshalUtil.ReadStruct <DARCFileTableEntry>(fs);
                Files.Add(entry);
                fileCount--;
            }

            var nameTableOffset = fs.Position;

            for (var i = 0; i < Files.Count; i++)
            {
                fs.Seek(nameTableOffset + Files[i].NameOffset, SeekOrigin.Begin);
                var mems = new MemoryStream();
                int firstByte = 1, secondByte = 1;
                while (firstByte != 0 || secondByte != 0)
                {
                    firstByte  = fs.ReadByte();
                    secondByte = fs.ReadByte();
                    mems.WriteByte((byte)firstByte);
                    mems.WriteByte((byte)secondByte);
                }
                FileNames.Add(Encoding.Unicode.GetString(mems.ToArray()));
                mems.Close();
            }
            return(true);
        }
Exemplo n.º 2
0
        public bool Open(Stream fs)
        {
            fs.Seek(0, SeekOrigin.Begin);

            Header = MarshalUtil.ReadStruct<DARCHeader>(fs);

            
            fs.Seek(Header.FileTableOffset + 8, SeekOrigin.Begin);
            var fileCount = fs.ReadByte();

            fs.Seek(Header.FileTableOffset, SeekOrigin.Begin);
            
            while (fileCount > 0)
            {
                var entry = MarshalUtil.ReadStruct<DARCFileTableEntry>(fs);
                Files.Add(entry);
                fileCount--;
            }

            var nameTableOffset = fs.Position;
            for (var i = 0; i < Files.Count; i++)
            {
                fs.Seek(nameTableOffset + Files[i].NameOffset, SeekOrigin.Begin);
                var mems = new MemoryStream();
                int firstByte = 1, secondByte = 1;
                while (firstByte != 0 || secondByte != 0)
                {
                    firstByte = fs.ReadByte();
                    secondByte = fs.ReadByte();
                    mems.WriteByte((byte)firstByte);
                    mems.WriteByte((byte)secondByte);
                }
                FileNames.Add(Encoding.Unicode.GetString(mems.ToArray()));
                mems.Close();
            }
            return true;
        }