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)
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]]; } }
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]]; } }
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; } } } }
public int GetFileIndex(ArchiveDatabase db, CFileItem item) { return db.Files.IndexOf(item); }