NEWS

[C#] Hướng dẫn giải nén file *.rar với tiến trình progress bar winform

[C#] Hướng dẫn giải nén file *.rar với tiến trình progress bar winform
Đăng bởi: Thảo Meo - Lượt xem: 3960 13:09:13, 20/03/2023C#   In bài viết

Xin chào  các bạn, bài viết hôm nay mình sẻ tiếp tục hướng dẫn các bạn cách giải nén file Winrar (*.rar) trên lập trình C#, Winform.

[C#] How to unrar in winform

winrar_thumb

WinRAR là một phần mềm nén và giải nén dữ liệu được sử dụng rộng rãi trên máy tính. Nó được phát triển bởi RARLAB và có sẵn trên nhiều nền tảng, bao gồm Windows, MacOS và Linux.

Một trong những ưu điểm của WinRAR là khả năng nén và giải nén tốt. Với khả năng nén dữ liệu lên đến 15% - 20% so với file gốc, WinRAR là một công cụ hữu ích để tiết kiệm không gian đĩa cứng. Ngoài ra, WinRAR cũng hỗ trợ các định dạng nén phổ biến như RAR, ZIP và 7Z, giúp người dùng có thể dễ dàng truy cập và tải xuống các file nén từ internet.

WinRAR còn có tính năng mã hóa dữ liệu giúp người dùng bảo vệ các file quan trọng. Nó cung cấp các tùy chọn để mã hóa và giải mã các file và thư mục theo nhiều cấp độ bảo mật khác nhau, từ mã hóa 128-bit đến 256-bit.

Tuy nhiên, WinRAR cũng có nhược điểm. Đầu tiên, đối với người dùng mới, giao diện của WinRAR có thể khó sử dụng và không thân thiện. Ngoài ra, WinRAR cũng có giá khá cao so với các phần mềm nén và giải nén miễn phí khác như 7-Zip hay PeaZip.

Tóm lại, WinRAR là một phần mềm nén và giải nén dữ liệu tốt và có nhiều tính năng hữu ích nhưng giá cả có thể là một rào cản đối với những người dùng mới và không thích hợp cho những người đang tìm kiếm một phần mềm miễn phí.

Video hướng dẫn từng bước viết ứng dụng giải nén C#:

Source code C#:

using SharpCompress.Archives;
using SharpCompress.Archives.Rar;
using SharpCompress.Common;
using System;
using System.Data;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using System.Windows.Forms;


namespace DemoExtractFileWinRar
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnBrowseSource_Click(object sender, EventArgs e)
        {
            var dlg = new OpenFileDialog();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                txtSource.Text = dlg.FileName;
            }
        }

        private void btnBrowseDest_Click(object sender, EventArgs e)
        {
            var dlg = new FolderBrowserDialog();
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                txtDest.Text = dlg.SelectedPath;
            }
        }

        int totalFile = 0;
        int completed = 0;


        public void DoExtractFile(IProgress<DataResponsed> progress)
        {
            using (var archive = RarArchive.Open(txtSource.Text))
            {
                totalFile = archive.Entries.Where(entry => !entry.IsDirectory).ToList().Count;
                foreach (var entry in archive.Entries.Where(entry => !entry.IsDirectory))
                {

                    entry.WriteToDirectory(txtDest.Text, new ExtractionOptions()
                    {
                        ExtractFullPath = true,
                        Overwrite = true,
                    });
                    Interlocked.Increment(ref completed);
                    var percentage = Convert.ToInt16(((double)completed / totalFile * 1.0) * 100d);
                    var data = new DataResponsed();
                    data.Percent = percentage;
                    data.FileName = entry.Key;
                    data.Size = entry.Size;
                    if (completed == totalFile)
                    {
                        data.isFinish = true;
                    }
                    progress.Report(data);
                }

            }
        }

        public class DataResponsed
        {
            public string FileName { get; set; }
            public long Size { get; set; }
            public int Percent { get; set; }
            public bool isFinish { get; set; } = false;
        }

        private async void btnUnrar_Click(object sender, EventArgs e)
        {
            completed = 0;
            richTextBox1.Text = "";
            var progress = new Progress<DataResponsed>(data =>
            {
                progressBar.Value = data.Percent;
                lblPercent.Text = $"{data.Percent}%";
                richTextBox1.AppendText(data.FileName + $" - Size: {data.Size}\n");
                richTextBox1.ScrollToCaret();
                if (data.isFinish)
                {
                    MessageBox.Show("Extract file finished......");
                }
            });

            await Task.Run(() => DoExtractFile(progress));
        }
    }
}

Thanks for watching!

DOWNLOAD SOURCE

 

THÔNG TIN TÁC GIẢ

BÀI VIẾT LIÊN QUAN

[C#] Hướng dẫn giải nén file *.rar với tiến trình progress bar winform
Đăng bởi: Thảo Meo - Lượt xem: 3960 13:09:13, 20/03/2023C#   In bài viết

CÁC BÀI CÙNG CHỦ ĐỀ

Đọc tiếp
.