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(); } }
public void FileChanged(FIMGFrame.FileImageEntryBase fimgeEntry) { End = Start + fimgeEntry.Size; }
public void Copy(FIMGFrame.FileImageEntryBase fimgEntry) { ReadFrom(new BinaryReader((Stream) new ByteArrayStream(fimgEntry.File))); }