首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# WinForm 表單呼叫壓縮/解壓縮類別範例

     編輯:關於C#

情境說明

已完成壓縮 (ZipClass) 與解壓縮 (UnZipClass) 邏輯類別,現需在 WinForm 介面上透過按鈕觸發操作。

介面配置

  • 兩個 Button:btnCompress (壓縮)、btnDecompress (解壓縮)
  • 可搭配 TextBox/FolderBrowserDialog 選擇來源/目標路徑

程式碼實作


private void btnCompress_Click(object sender, EventArgs e)
{
    string[] paths = new string[2];
    paths[0] = @"C:\SourceFolder";      // 待壓縮資料夾
    paths[1] = @"C:\Output\archive.zip"; // 輸出壓縮檔

    ZipClass zip = new ZipClass();
    zip.ZipFileMain(paths);
    MessageBox.Show("壓縮完成");
}

private void btnDecompress_Click(object sender, EventArgs e)
{
    string[] paths = new string[2];
    paths[0] = @"C:\Output\archive.zip"; // 壓縮檔路徑
    paths[1] = @"C:\ExtractFolder";      // 解壓縮目標資料夾

    UnZipClass unzip = new UnZipClass();
    unzip.UnZip(paths);
    MessageBox.Show("解壓縮完成");
}

關鍵點提醒

  1. 路徑處理:實務上應使用 FolderBrowserDialog 或 OpenFileDialog 讓使用者選擇,避免硬編碼路徑。
  2. 非同步執行:壓縮/解壓縮可能耗時,建議使用 Task.Run 或 BackgroundWorker 避免凍結 UI,並搭配 ProgressBar 顯示進度。
  3. 例外處理:包裹在 try-catch 中,友善提示錯誤 (權限不足、磁碟空間不足、檔案損毀等)。
  4. 資源釋放:確保 ZipClass/UnZipClass 正確釋放檔案流 (using 或 Dispose)。

非同步版本範例 (現代寫法)


private async void btnCompress_Click(object sender, EventArgs e)
{
    btnCompress.Enabled = false;
    progressBar.Visible = true;
    try
    {
        await Task.Run(() => 
        {
            var zip = new ZipClass();
            zip.ZipFileMain(paths);
        });
        MessageBox.Show("壓縮完成");
    }
    catch (Exception ex)
    {
        MessageBox.Show($"失敗: {ex.Message}");
    }
    finally
    {
        btnCompress.Enabled = true;
        progressBar.Visible = false;
    }
}

將壓縮邏輯封裝於獨立類別,表單僅負責 UI 互動與參數收集,符合關注點分離原則,便於維護與測試。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved