 
                 // File's unpack size is required to proceed. 
                 // Next check ensures that we don't `unpackSizes` array's boundaries.
-                guard fileIndex < substreamInfo.unpackSizes.count
+                guard nonEmptyFileIndex < substreamInfo.unpackSizes.count
                     else { throw SevenZipError.noFileSize }
 
-                let fileSize = substreamInfo.unpackSizes[fileIndex]
+                let fileSize = substreamInfo.unpackSizes[nonEmptyFileIndex]
                 let fileData = Data(bytes: rawFileData.bytes(count: fileSize))
 
                 let calculatedFileCRC = CheckSums.crc32(fileData)
-                if fileIndex < substreamInfo.digests.count {
-                    guard calculatedFileCRC == substreamInfo.digests[fileIndex]
+                if nonEmptyFileIndex < substreamInfo.digests.count {
+                    guard calculatedFileCRC == substreamInfo.digests[nonEmptyFileIndex]
                         else { throw SevenZipError.wrongCRC }
                 }
 

            let data: Data?

            if !file.isEmptyStream {
                // TODO: Does empty files need all this?

                // Without `SevenZipStreamInfo` and `SevenZipPackInfo` objects,
                //  we cannot find file data location in container.
                guard let streamInfo = header.mainStreams

                rawUnpackSize += fileSize

                fileInFolderCount += 1
                nonEmptyFileIndex += 1

                if fileInFolderCount > folder.numUnpackSubstreams { // If we read all files in folder...
                    // We need to check folder's unpacked size as well as its CRC32 (if it is available).
