コード例 #1
0
        private void FillFolderStartFileIndex()
        {
            _folderStartFileIndex.Clear();
            _fileIndexToFolderIndexMap.Clear();

            int folderIndex   = 0;
            int indexInFolder = 0;

            for (int i = 0; i < _files.Count; i++)
            {
                CFileItem file = _files[i];

                bool emptyStream = !file.HasStream;

                if (emptyStream && indexInFolder == 0)
                {
                    _fileIndexToFolderIndexMap.Add(-1);
                    continue;
                }

                if (indexInFolder == 0)
                {
                    // v3.13 incorrectly worked with empty folders
                    // v4.07: Loop for skipping empty folders
                    for (;;)
                    {
                        if (folderIndex >= _folders.Count)
                        {
                            throw new InvalidOperationException();
                        }

                        _folderStartFileIndex.Add(i); // check it

                        if (_numUnpackStreamsVector ![folderIndex] != 0)
コード例 #2
0
 internal SevenZipFilePart(Stream stream, ArchiveDatabase database, int index, CFileItem fileEntry)
 {
     this.stream = stream;
     this.database = database;
     Index = index;
     Header = fileEntry;
     if (Header.HasStream)
     {
         Folder = database.Folders[database.FileIndexToFolderIndexMap[index]];
     }
 }
コード例 #3
0
 internal SevenZipFilePart(Stream stream, ArchiveDatabase database, int index, CFileItem fileEntry)
 {
     this.stream   = stream;
     this.database = database;
     Index         = index;
     Header        = fileEntry;
     if (Header.HasStream)
     {
         Folder = database.Folders[database.FileIndexToFolderIndexMap[index]];
     }
 }
コード例 #4
0
 internal SevenZipFilePart(Stream stream, ArchiveDatabase database, int index, CFileItem fileEntry, ArchiveEncoding archiveEncoding)
     : base(archiveEncoding)
 {
     _stream   = stream;
     _database = database;
     Index     = index;
     Header    = fileEntry;
     if (Header.HasStream)
     {
         Folder = database._folders[database._fileIndexToFolderIndexMap[index]];
     }
 }
コード例 #5
0
        private void FillFolderStartFileIndex()
        {
            this.FolderStartFileIndex.Clear();
            this.FileIndexToFolderIndexMap.Clear();
            int num  = 0;
            int num2 = 0;

            for (int i = 0; i < this.Files.Count; i++)
            {
                bool      flag2;
                CFileItem item = this.Files[i];
                bool      flag = !item.HasStream;
                if (flag && (num2 == 0))
                {
                    this.FileIndexToFolderIndexMap.Add(-1);
                    continue;
                }
                if (num2 != 0)
                {
                    goto Label_00BF;
                }
                goto Label_00B9;
Label_0075:
                if (num >= this.Folders.Count)
                {
                    throw new InvalidOperationException();
                }
                this.FolderStartFileIndex.Add(i);
                if (this.NumUnpackStreamsVector[num] != 0)
                {
                    goto Label_00BF;
                }
                num++;
Label_00B9:
                flag2 = true;
                goto Label_0075;
Label_00BF:
                this.FileIndexToFolderIndexMap.Add(num);
                if (!flag)
                {
                    num2++;
                    if (num2 >= this.NumUnpackStreamsVector[num])
                    {
                        num++;
                        num2 = 0;
                    }
                }
            }
        }
コード例 #6
0
 public int GetFileIndex(ArchiveDatabase db, CFileItem item)
 {
     return db.Files.IndexOf(item);
 }