已完成壓縮 (ZipClass) 與解壓縮 (UnZipClass) 邏輯類別,現需在 WinForm 介面上透過按鈕觸發操作。
btnCompress (壓縮)、btnDecompress (解壓縮)
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("解壓縮完成");
}
FolderBrowserDialog 或 OpenFileDialog 讓使用者選擇,避免硬編碼路徑。Task.Run 或 BackgroundWorker 避免凍結 UI,並搭配 ProgressBar 顯示進度。try-catch 中,友善提示錯誤 (權限不足、磁碟空間不足、檔案損毀等)。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 互動與參數收集,符合關注點分離原則,便於維護與測試。