Пример #1
0
        public FIMGFrame(BinaryReader brrReader, int nSize, params object[] args)
        {
            FATBFrame fatbFrame = (FATBFrame)args[0];

            if (nSize < 0 || nSize > 0 && fatbFrame.FilesCount == 0)
            {
                throw new FormatException();
            }
            m_lstfimgeEntries = new List <FIMGFrame.FileImageEntryBase>(fatbFrame.FilesCount);
            int position = (int)brrReader.BaseStream.Position;
            int num      = 0;

            foreach (FATBFrame.FileAllocationTableEntry entry in fatbFrame.Entries)
            {
                if ((long)entry.Start != brrReader.BaseStream.Position - (long)position)
                {
                    throw new FormatException();
                }
                FIMGFrame.FileImageEntryBase fileImageEntryBase = (FIMGFrame.FileImageEntryBase)null;
                foreach (byte readByte in brrReader.ReadBytes(4))
                {
                    if (readByte < (byte)65 || readByte > (byte)90)
                    {
                        brrReader.BaseStream.Position           -= 4L;
                        m_lstfimgeEntries.Add(fileImageEntryBase = SimpleFileImageEntry.ReadFrom(brrReader, entry.End - entry.Start, ref nSize));
                        break;
                    }
                }
                if (fileImageEntryBase == null)
                {
                    brrReader.ReadInt32();
                    bool flag = (long)brrReader.ReadInt32() > brrReader.BaseStream.Length - brrReader.BaseStream.Position + 12L;
                    brrReader.BaseStream.Position -= 12L;
                    try
                    {
                        if (flag)
                        {
                            m_lstfimgeEntries.Add(fileImageEntryBase = SimpleFileImageEntry.ReadFrom(brrReader, entry.End - entry.Start, ref nSize));
                        }
                        else
                        {
                            m_lstfimgeEntries.Add(fileImageEntryBase = (FIMGFrame.FileImageEntryBase)NitroFileBase.ReadFrom(brrReader, entry.End - entry.Start, ref nSize));
                        }
                    }
                    catch
                    {
                    }
                    ++num;
                }
                fileImageEntryBase.Changed += new FIMGFrame.FileImageEntryBase.FileChanged(entry.FileChanged);
                while ((brrReader.BaseStream.Position - (long)position) % 4L != 0L)
                {
                    if (brrReader.ReadByte() != byte.MaxValue)
                    {
                        throw new FormatException();
                    }
                    --nSize;
                }
            }
            if (nSize != 0)
            {
                throw new FormatException();
            }
        }
Пример #2
0
 public void FileChanged(FIMGFrame.FileImageEntryBase fimgeEntry)
 {
     End = Start + fimgeEntry.Size;
 }
Пример #3
0
 public void Copy(FIMGFrame.FileImageEntryBase fimgEntry)
 {
     ReadFrom(new BinaryReader((Stream) new ByteArrayStream(fimgEntry.File)));
 }