public void NextFile() { if (cabFile != null) { cabFile.Dispose(); } ++volumeNumber; cabFile = GlobalFileSystem.Open("{0}{1}.cab".F(commonName, volumeNumber)); if (cabFile.ReadUInt32() != 0x28635349) { throw new InvalidDataException("Not an Installshield CAB package"); } uint fileOffset; if ((fileDes.Flags & FileSplit) != 0) { cabFile.Seek(CommonHeader.Size, SeekOrigin.Current); var head = new VolumeHeader(cabFile); if (index == head.LastFileIndex) { if ((fileDes.Flags & FileCompressed) != 0) { RemainingArchiveStream = head.LastFileSizeCompressed; } else { RemainingArchiveStream = head.LastFileSizeExpanded; } fileOffset = head.LastFileOffset; } else if (index == head.FirstFileIndex) { if ((fileDes.Flags & FileCompressed) != 0) { RemainingArchiveStream = head.FirstFileSizeCompressed; } else { RemainingArchiveStream = head.FirstFileSizeExpanded; } fileOffset = head.FirstFileOffset; } else { throw new Exception("Cannot Resolve Remaining Stream"); } } else { if ((fileDes.Flags & FileCompressed) != 0) { RemainingArchiveStream = fileDes.CompressedSize; } else { RemainingArchiveStream = fileDes.ExpandedSize; } fileOffset = fileDes.DataOffset; } cabFile.Seek(fileOffset, SeekOrigin.Begin); }
public void Write(Dictionary <string, byte[]> contents) { GlobalFileSystem.Unmount(this); throw new NotImplementedException("Updating bag files unsupported"); }