2015-05-05 3 views
1

У меня есть приложение, которое извлекает файлы Targz, я хотел бы получить ProgressBar для просмотра результатов извлечения.sharpziplib progressbar to extract targz

Но я просто так:

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

Вы не сможете сделать это, используя ExtractContents. Это синхронная функция, означающая, что она будет работать до конца, прежде чем вернуться, и вы не сможете добиться прогресса до ее возвращения.

Обычный способ получения обратной связи состоит в том, чтобы добавить асинхронную функцию обратного вызова к методу извлечения, а затем метод извлечения асинхронно сообщает о ходе выполнения этого обратного вызова. Однако API SharpZipLib не поддерживает это напрямую, насколько я могу судить по быстрому бризу через документы. Вам нужно будет создать эту функцию самостоятельно.

Вы можете посмотреть на This example on how to control the extraction from the tar или Find inspiration in the implementation of ExtractContents

Затем можно либо сообщить о прогрессе в плане total_entries/processed_entries или total_bytes/processed_bytes.

Что касается асинхронного обратного вызова Take a look here. Это не совсем то, что вы делаете, но принятый ответ иллюстрирует, как использовать асинхронные вызовы.

+0

Благодарим вас за подробности. я посмотрю документацию об извлечении полного контроля, и я надеюсь, что мне удастся что-то сделать. – Neyoh