DotNetZip获取条目提取进度

本文关键字:提取 获取 DotNetZip | 更新日期: 2023-09-27 18:20:59

有人知道如何检查zip文件夹中条目提取的进度吗?在我的情况下,用户可以选择要提取的文件夹,我想制作两个进度条,一个用于整个过程(步骤是完成提取所选目录之一),另一个用于从子文件夹中提取。我知道有整个zip的进展,但当我只想提取一些内容,或者我专注于ZipEntry的进展,而不是整个zip时,该怎么办。

DotNetZip获取条目提取进度

我有一个保存过程,但它似乎反映了提取的处理。如果您更改以下内容以处理ExtractProgress,它应该非常相似。

以下是我对SaveProgress事件的处理,我在保存zip文件时跟踪总进度和当前文件进度:

private void _archive_SaveProgress(object sender, SaveProgressEventArgs e)
{
    switch (e.EventType)
    {
        case ZipProgressEventType.Saving_BeforeWriteEntry:
            if (e.EntriesTotal > 0)
            {
                // Update the view with the total percentage progress.
                int totalPercentage = (e.EntriesSaved / e.EntriesTotal) * 100m;
                View.SavingStatus(e.CurrentEntry.FileName, 0, totalPercentage);
            }
            break;
        case ZipProgressEventType.Saving_EntryBytesRead:
            int filePercentage = 0;
            if (e.BytesTransferred == 0)
            {
                filePercentage = 0;
            }
            else
            {
                filePercentage = (new decimal(e.BytesTransferred) / new decimal(e.TotalBytesToTransfer)) * 100m;
            }
            // Update the view with the current file percentage.
            View.SavingStatus("Archiving file " + e.CurrentEntry.FileName + "...", filePercentage, -1);
            break;
        case ZipProgressEventType.Saving_Completed:
            View.SavingStatus("Archive creation complete, saving data changes...", 100, 100);
            break;
    }
}

case语句的第一部分处理整个zip保存的进度,第二部分处理当前文件。在这种情况下,调用View.SavingStatus会用当前状态文本更新标签,并更新界面上的两个进度条。