sharpziplib进度条提取targz

时间:2015-05-05 12:06:42

标签: c# stream progress-bar sharpziplib

我有一个提取targz文件的应用程序,我希望ProgressBar能够查看提取的进度。

但我有这个:

public void ExtractTGZ(String gzArchiveName, String destFolder) 
{
    Stream inStream = File.OpenRead(gzArchiveName);
    Stream gzipStream = new GZipInputStream(inStream);

    TarArchive tarArchive = TarArchive.CreateInputTarArchive(gzipStream);
    tarArchive.ExtractContents(destFolder);
    tarArchive.Close();

    gzipStream.Close();
    inStream.Close();
}  

你有什么想法吗?我实际上搜索了如何知道传输的字节数和总字节数。我没有找到有关此信息和targz文件的具体信息。

1 个答案:

答案 0 :(得分:1)

您将无法使用ExtractContents执行此操作。它是一个同步函数,意味着它将在返回之前运行到结束,并且在返回之前无法获得进度。

获得反馈的通常方法是向提取方法添加异步回调函数,然后让提取方法通过此回调异步报告进度。但是,SharpZipLib API不直接支持这一点,据我所知,通过文档快速轻松。您必须自己创建此功能。

你可以看看 This example on how to control the extraction from the tarFind inspiration in the implementation of ExtractContents

然后,您可以根据total_entries / processed_entries或total_bytes / processed_bytes报告进度。

关于进行异步回调Take a look here。这不完全是你在做什么,但接受的答案说明了如何使用异步调用。