Сжатие файла с помощью Ionic.ZIP с индикатором выполнения [Windows Forms] - PullRequest
4 голосов
/ 04 июня 2019

Я готовлю приложение, которое создает zip-файл для данного каталога.

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

  1. Расчетное время для завершения этого почтового индекса (истекшее время и оставшееся время)
  2. Процент для завершения Zipping

Вот мой письменный код:

* +1012 *enter image description here
    private void CreateZip(string FilePath)
    {
        using (ZipFile zip = new ZipFile())
        {
            zip.AddProgress += Zip_AddProgress;
            zip.SaveProgress += Zip_SaveProgress;
            zip.CompressionMethod = Ionic.Zip.CompressionMethod.Deflate;
            zip.CompressionLevel = Ionic.Zlib.CompressionLevel.BestCompression;
            zip.UseZip64WhenSaving = Zip64Option.AsNecessary;
            if (!string.IsNullOrEmpty(FilePath))
            {
                zip.AddDirectory(FilePath, new DirectoryInfo(FilePath).Name);
            }
           var d= zip;

            if (File.Exists(txtDest.Text))
            {
                File.Delete(txtDest.Text);
            }
            zip.Save(txtDest.Text);
        }
    }

    private void Zip_SaveProgress(object sender, SaveProgressEventArgs e)
    {
        if (e.EventType == ZipProgressEventType.Saving_Started)
            lblFileName.Text = "Proccess Started Successfully";

        if (e.EventType == ZipProgressEventType.Saving_AfterSaveTempArchive)
            lblFileName.Text = "Proccess Completed Successfully";


        if (e.BytesTransferred > 0 && e.TotalBytesToTransfer > 0)
        {
            int progress = (int)Math.Floor((decimal)((e.BytesTransferred * 100) / e.TotalBytesToTransfer));
            pbPerFile.Value = progress;
            lblPercentagePerFile.Text = Convert.ToString(progress) + "%";
            Application.DoEvents();
        }

        if (e.EntriesSaved > 0 && e.EntriesTotal > 0)
        {
            int progress = (int)Math.Floor((decimal)((e.EntriesSaved * 100) / e.EntriesTotal));
            pbTotalFile.Value = progress;
            Application.DoEvents();
            lblTotal.Text = Convert.ToString(progress) + "%";           
        }
    }

Первый индикатор выполнения работает с размером файла из-за e.BytesTransferred и e.TotalBytesToTransfer - это возвращаемый размер в байт .

Но e.EntriesSaved и e.EntriesTotal вернет длину сохраненных записей и общее количество записей, которые мы добавили.

Поэтому я хочу, чтобы второй индикатор выполнения работал в зависимости от размера всех выбранных файлов и сжатых файлов.

Ваши усилия будут оценены.

Спасибо ...

...