Example #1
0
        public static MemoryStream ExtractFile(this OdiFileEntry entry, BinaryReader reader, List <OdiFileEntry> entryList)
        {
            var records = entryList
                          .Where(e => e.FileName == entry.FileName)
                          .OrderBy(e => e.RecNo)
                          .ToArray();
            List <byte> data = new();

            foreach (OdiFileEntry record in records)
            {
                for (int i = 0; i < record.Extent.Length; i++)
                {
                    if (record.Extent[i] == 0)
                    {
                        break;
                    }

                    long offset = ext_offset(record.Extent[i]);
                    reader.BaseStream.Position = offset;
                    var size = entry.ExtSize;
                    for (int n = 0; n < 16; n++)
                    {
                        reader.BaseStream.Position = offset + n * EXT_SIZE;
                        data.AddRange(reader.ReadBytes(EXT_SIZE));
                        if (--size == 0)
                        {
                            break;
                        }
                    }
                }
            }
            return(new MemoryStream(data.ToArray()));
        }
Example #2
0
 public static void LoadFileInfo(this List <OdiFileEntry> list, BinaryReader reader)
 {
     for (int i = 0; i < DIR_ENTRY; i++)
     {
         var item = new OdiFileEntry(reader);
         if (item.User == 0xE5)
         {
             break;
         }
         list.Add(item);
     }
 }
Example #3
0
        public static void ExtractFile(this OdiFileEntry entry, BinaryReader reader, List <OdiFileEntry> entryList, string path, bool tranc)
        {
            var fileName = Path.Combine(path, entry.FileName);

            using (var fileMemory = entry.ExtractFile(reader, entryList))
                File.WriteAllBytes(fileName, fileMemory.ToArray());
            string ext = Path.GetExtension(entry.FileName).ToUpper();

            if (tranc && (ext == ".BRU" || ext == ".ORD"))
            {
                ushort size;
                using (var fileStream = File.Open(fileName, FileMode.Open, FileAccess.ReadWrite))
                    using (var fileReader = new BinaryReader(fileStream))
                    {
                        fileStream.Seek(10, SeekOrigin.Begin);
                        size = (ushort)(fileReader.ReadUInt16() + 16);
                        fileStream.SetLength(size);
                    }
            }
        }