1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 71
1
.NET 4.x

Распаковка zip архива

03.01.2020, 03:35. Показов 3238. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно распаковать архив из 1 места в ту директорию которую я укажу (путь к ней если быть точнее) я нашел несколько способов, но у всех нет async метода, да можно сделать Task.Run, но я не очень силен в теме потоков и всякого такого, в общем в чем суть мне нужно что-то что будет распаковывать асинхронно + писать проценты в ProgressBar (если нет чего-то что прям процент выводит, то пойдет и переданное кол-во байтов и всего надо передать байтов).
Надеюсь есть человек который сможет помочь

Еще забыл написать есть библиотека dotnetzip и там есть событие которое возникает при извлечение, а в событии можно узнать все о распаковке
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.01.2020, 03:35
Ответы с готовыми решениями:

ZIP распаковка WPF
Я разрабатываю приложение, типа WPI и мне требуется распаковка ZIP архивов. Я не могу понять, куда...

Распаковка ZIP архива / DotNetZip
Доброго времени суток уважаемые! Столкнулся с казалось бы, элементарной задачей: распаковать ZIP...

Распаковка архива
Есть архив) но не простой а рекурсивный. Как средствами c# извлечь его

Распаковка архива по FTP
Файл невозможно разархивировать командой по ftp. Так ли это? Если да, то получается,что придется...

7
1498 / 892 / 325
Регистрация: 17.05.2015
Сообщений: 3,386
03.01.2020, 13:55 2
Ask0n, давайте сюда синхронный код с процентами, оберну в Task.Run

Добавлено через 57 секунд
лучше проект целиком, со всеми библиотеками, рабочий
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 71
03.01.2020, 14:12  [ТС] 3
Весь не смогу так как его не открыть а вот рабочий код щас скину я пробовал в Task.Run закидывать но там уже другая проблема так как это другой поток, то я не могу обратится к прогресс бару

я весь метод кидать не буду там просто создание пути к папке в которую надо распаковать

распаковка
C#
1
2
3
4
5
6
7
8
9
string zipPath = @"C;\test.zip"; //Путь к архиву
string  path = @"C:\Test"; //Сюда распаковывать будет
using (var zip = ZipFile.Read(zipPath))
{
    //Прогресс при распаковке
    zip.ExtractProgress += new EventHandler<ExtractProgressEventArgs>(ExtractProgress);
    //Распаковка
    zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
}
ExtractProgress:
C#
1
2
3
4
5
6
7
if (e.TotalBytesToTransfer > 0)
{
    InstallInfo.ProgressBar.Value = Convert.ToInt32(100 * e.BytesTransferred / e.TotalBytesToTransfer);
    InstallInfo.Percents = Convert.ToInt32(100 * e.BytesTransferred / e.TotalBytesToTransfer).ToString();
}
InstallInfo.TotalDownload = e.BytesTransferred + "/" + e.TotalBytesToTransfer;
InstallInfo.ActionBuild = "Распаковка " + BuildInfo.NameTitle.Replace(" ", "") + ".7z";
Добавлено через 2 минуты
Забыл дописать что использую библиотеку DotNetZip
0
1498 / 892 / 325
Регистрация: 17.05.2015
Сообщений: 3,386
03.01.2020, 14:22 4
Лучший ответ Сообщение было отмечено Ask0n как решение

Решение

Цитата Сообщение от Ask0n Посмотреть сообщение
то я не могу обратится к прогресс бару
ну если вся проблема в этом, то вот
https://professorweb.ru/my/WPF... 1/31_2.php
C#
1
2
3
4
5
6
his.Dispatcher.BeginInvoke(DispatcherPriority.Normal,
                (ThreadStart)delegate()
            {
                txb.Text = "Вставить новый текст";
            }
            );
1
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 71
03.01.2020, 14:39  [ТС] 5
Цитата Сообщение от Рядовой Посмотреть сообщение
ну если вся проблема в этом, то вот
Возникла проблема с Dispatcher.BeginInvoke я не очень понимаю откуда его взять (возмооожно это из-за того что я не в классе окна все это делаю, а в ViewModel)

Добавлено через 2 минуты
я же правильно делаю ?
сама распаковка
C#
1
2
3
4
5
6
7
8
await Task.Run(() =>
                {
                    using (var zip = ZipFile.Read(zipPath))
                    {
                        zip.ExtractProgress += ExtractProgress;
                        zip.ExtractAll(path, ExtractExistingFileAction.OverwriteSilently);
                    }
                });
ExtractProgress
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void ExtractProgress(object sender, ExtractProgressEventArgs e)
        {
            this.Dispatcher.BeginInvoke(DispatcherPriority.Normal, (ThreadStart)delegate ()
            {
                if (e.TotalBytesToTransfer > 0)
                {
                    InstallInfo.ProgressBar.Value = Convert.ToInt32(100 * e.BytesTransferred / e.TotalBytesToTransfer);
                    InstallInfo.Percents = Convert.ToInt32(100 * e.BytesTransferred / e.TotalBytesToTransfer).ToString();
                }
                InstallInfo.TotalDownload = e.BytesTransferred + "/" + e.TotalBytesToTransfer;
                InstallInfo.ActionBuild = "Распаковка " + BuildInfo.NameTitle.Replace(" ", "") + ".7z";
                InstallInfo.Speed = (Convert.ToDouble(e.BytesTransferred) / sw.Elapsed.TotalSeconds).ToString("0.00");
            });
        }
0
1498 / 892 / 325
Регистрация: 17.05.2015
Сообщений: 3,386
03.01.2020, 14:42 6
Ask0n, а как это вы из ViewModel обращаетесь к прогресс бару?

Добавлено через 1 минуту
Это все в ViewModel ?
0
1 / 1 / 0
Регистрация: 05.10.2017
Сообщений: 71
03.01.2020, 15:52  [ТС] 7
нуу да )

Добавлено через 2 минуты
Цитата Сообщение от Рядовой Посмотреть сообщение
а как это вы из ViewModel обращаетесь к прогресс бару?
Скорее всего так глупо делать, но я сделал так
у меня есть модель в ней есть ProgressBar и я привязываю его к прогресс бару в xaml
если такое делать полный бред, то буду рад совету

Добавлено через 1 час 6 минут
Все вроде разобрался как надо было сделать
0
215 / 149 / 48
Регистрация: 28.12.2016
Сообщений: 716
03.01.2020, 16:20 8
Ask0n, в VM используйте свйоство int/double вместо progressbar'a
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.01.2020, 16:20
Помогаю со студенческими работами здесь

Распаковка архива с заменой файлов
Здравствуйте. Использую код: ZipFile zf = new ZipFile(&quot;content.zip&quot;); ...

Распаковка архива с заменой файлов
Как сделать распаковку архива с заменой файлов? using (ZipFile zip =...

Распаковка архива .rar в папку
Доброго времени суток, уважаемые форумчане. Есть небольшое самостоятельное задание, связанное с...

Распаковка архива без библиотек
Ну вообщем вот так вот... это вызвано тем, что у меня маленькая программа-лаунчер, а скачивать...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru