Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SevenZipSharp (7z), Асинхронная распаковка/запаковка 
:(
    Опции темы
Felixx
Дата 21.8.2012, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Всем привет!
Кто работал с данной библиотекой, подскажите/дайте пример пожалуйста, как сделать асинхронную запаковку/распаковку архивов 7z.
Например имеется:
List<string> list в котором около 2000 fullPath к 7z архивам..
посмотрел тут http://habrahabr.ru/post/103521/ но что то ничего не понел :(
Хелп плз...

PM MAIL   Вверх
Felixx
Дата 21.8.2012, 16:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Разобрался. Если кому то понадобится:

Код

        delegate void SetProgressDelegate(ProgressEventArgs args);
        delegate void SetInfoDelegate(FileInfoEventArgs args);
        delegate void SetOverwriteDelegate(FileOverwriteEventArgs args);
        delegate void SetNoArgsDelegate();

        private void goUnZip2(string path)
        {
            using (SevenZipExtractor extr = new SevenZipExtractor(path))
            {
                extr.Extracting += new EventHandler<ProgressEventArgs>(extr_Extracting);
                extr.FileExtractionStarted += new EventHandler<FileInfoEventArgs>(extr_FileExtractionStarted);
                extr.FileExists += new EventHandler<FileOverwriteEventArgs>(extr_FileExists);
                extr.ExtractionFinished += new EventHandler<EventArgs>(extr_ExtractionFinished);

                try
                {
                    extr.ExtractArchive(RConfig.Instance.PBDirectory);
                }
                catch (SevenZipArchiveException)
                {
                    _failure = true;
                }
                catch (ExtractionFailedException)
                {
                    _failure = true;
                }
                catch (IOException)
                {
                    new MessageForm("FileNotFound: " + path);
                }
                extr.Dispose();
            }
        }

        void extr_ExtractionFinished(object sender, EventArgs e)
        {
            this.Invoke(new SetNoArgsDelegate(() =>
            {
              statusProgressBar.Style = ProgressBarStyle.Blocks;
              statusProgressBar.Value = 0;
              statusProgressBar.Text = "Finished";
            }));
            _failure = false;

            comp = 100;
        }

        void extr_FileExists(object sender, FileOverwriteEventArgs e)
        {
            label6.Invoke(new SetOverwriteDelegate((args) =>
            {
                label6.Text += String.Format("Warning: \"{0}\" already exists; overwritten\r\n", args.FileName);
            }), e);
        }

        void extr_FileExtractionStarted(object sender, FileInfoEventArgs e)
        {
            label5.Invoke(new SetInfoDelegate((args) =>
            {
                label5.Text = String.Format("Extracting \"{0}\"", args.FileInfo.FileName);
            }), e);

            statusProgressBar.Value = 0;
            statusProgressBar.Maximum = 100;
        }

        void extr_Extracting(object sender, ProgressEventArgs e)
        {
            //statusProgressBar.Invoke(new SetProgressDelegate((args) =>
            //{
            //    statusProgressBar.Increment(args.PercentDelta);
            //}), e);

            statusProgressBar.Value = e.PercentDone;
        }

PM MAIL   Вверх
Felixx
Дата 23.8.2012, 11:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



...см.next

Это сообщение отредактировал(а) Felixx - 23.8.2012, 13:08
PM MAIL   Вверх
Felixx
Дата 23.8.2012, 13:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Что то никак не получается, каждый файл сохранить в отдельном архиве.. он сразу все в один архив сует..
кто знает как вылечить? Если это конечно возможно, как я понел либа такова не умеет... smile
Вышло пока что только так:
Код


        private void button2_Click(object sender, EventArgs e)
        {
            listBox1.Items.Clear();
            allfiles = Directory.GetFileSystemEntries(gamePath.Text, "*.*", SearchOption.AllDirectories);
            progressBar1.Minimum = 0;
            progressBar1.Maximum = allfiles.Length;
            progressBar1.Value = 0;
            progressBar1.Step = 1;

            if (WORKER.IsBusy != true)
                WORKER.RunWorkerAsync();
        }

        private void WORKER_DoWork(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker worker = sender as BackgroundWorker;
            if (worker.CancellationPending == true)
            {
                e.Cancel = true;
            }
            else
            {
                String path = gamePath.Text;

                if (Directory.Exists(path))
                {
                    for (int i = 0; i < allfiles.Length; i++)
                    {
                        WORKER.ReportProgress(i);
                        addText(allfiles[i].Replace(gamePath.Text, ""));
                    }
                }
                else
                    MessageBox.Show("No Have Dir: " + path);
            }
        }
        private void WORKER_ProgressChanged(object sender, ProgressChangedEventArgs e)
        {
            //MessageBox.Show("percent: " + Convert.ToString(e.ProgressPercentage));
            Instance.progressBar1.Value = e.ProgressPercentage;
        }
        private void WORKER_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
        {
            MessageBox.Show("Файлов, для архивирования: " + allfiles.Length);
            goZip(Environment.CurrentDirectory + @"\packed\", allfiles);
        }
        private void addText(string newText)
        {
            if (Instance.listBox1.InvokeRequired)
                Instance.listBox1.Invoke(new Action<string>((s) => Instance.listBox1.Items.Add(s)), newText);
            else
                Instance.listBox1.Items.Add(newText);
        }

        private SevenZipCompressor zip;
        delegate void SetProgressDelegate(ProgressEventArgs args);
        delegate void SetInfoDelegate(FileNameEventArgs args);
        delegate void SetNoArgsDelegate();
        /// <summary>
        /// Архивирование списка файлов.
        /// </summary>
        /// <param name="zipPath">Папка, куда сохраняем архивы.</param>
        /// <param name="fileFullNames">Массив имен файлов для запаковки. Пример одной записи: "/folder/1/text/test/file1.7z")</param>
        private void goZip(string zipPath, string[] fileFullNames)
        {
            Instance.progressBar1.Maximum = 100;// *allfiles.Length;
            if (!Directory.Exists(zipPath))
                Directory.CreateDirectory(zipPath);

            zip = new SevenZipCompressor(); // Создаем объект для работы с архивом
            zip.CompressionLevel = CompressionLevel.Ultra; // Задаем максимальную степень сжатия 

            zip.Compressing += new EventHandler<ProgressEventArgs>(Compressing);
            zip.FileCompressionStarted += new EventHandler<FileNameEventArgs>(FileCompressionStarted);
            zip.CompressionFinished += new EventHandler<EventArgs>(CompressionFinished);

            try
            {
                zip.BeginCompressFiles(zipPath + "test.7z", fileFullNames);
            }
            catch (Exception e)
            {
                MessageBox.Show("Error:\n" + e);
            }
        }

        private void Compressing(object sender, ProgressEventArgs e)
        {
            this.Text = String.Format("[Complited] {0} %", e.PercentDone);
            Instance.progressBar1.Value = e.PercentDone;
        }

        private void FileCompressionStarted(object sender, FileNameEventArgs e)
        {
            //this.Text = String.Format("file: {0} percent: {1} %", e.FileName, e.PercentDone);
        }

        private void CompressionFinished(object sender, EventArgs e)
        {
            progressBar1.Value = 0;
            MessageBox.Show("Архивирование закончено!");
        } 


Это сообщение отредактировал(а) Felixx - 23.8.2012, 13:29
PM MAIL   Вверх
Felixx
Дата 23.8.2012, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Бррр, чую, надо дорабатывать саму либу SevenZipSharp.
Исходы скачал(там кстати новее либа чем скомпиленная), но нифига не могу пока что понять. Кто хочет помоч и мне и разработчику даннойц либы? написав методы, эвенты для реализации подобной задачи? smile
PM MAIL   Вверх
Felixx
Дата 24.8.2012, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Неужели нет никого кому это интересно или кто сталкивался с этой проблемой.? :(
PM MAIL   Вверх
Felixx
Дата 31.8.2012, 08:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 4.12.2008

Репутация: нет
Всего: нет



Народ, есть кто сможет помоч дописать функцию в бибилиотеке? :(
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.