示例#1
0
            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);
            }
示例#2
0
 public void Write(Dictionary <string, byte[]> contents)
 {
     GlobalFileSystem.Unmount(this);
     throw new NotImplementedException("Updating bag files unsupported");
 }