首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C# 調用 WinRAR 解壓後文件消失的排查與規範化方案

     編輯:程式設計綜合問答

現有代碼缺陷

  • 依賴註冊表查找 `WinRAR.exe` 路徑,用戶未安裝或路徑變更即失效。
  • 命令行參數拼接未處理空格、特殊字符,導致解壓目標路徑解析錯誤。
  • 無輸出重定向、退出碼檢查,無法感知解壓失敗。
  • 同步阻塞 UI 線程(`WaitForExit`),大文件導致界面凍結。

推薦方案:使用成熟庫(SharpCompress / SevenZipSharp)

// SharpCompress 示例
using (var archive = RarArchive.Open(rarPath)) {
    foreach (var entry in archive.Entries.Where(e => !e.IsDirectory)) {
        entry.WriteToDirectory(extractPath, new ExtractionOptions { ExtractFullPath = true, Overwrite = true });
    }
}
// 無需外部依賴,純托管代碼,支持密碼、分卷、進度事件

若必須調用外部進程

  1. 配置文件中顯式配置 `WinRAR` 路徑,提供兜底默認值。
  2. 使用 `ProcessStartInfo` 設置 `RedirectStandardOutput/Error = true`,異步讀取輸出避免死鎖。
  3. 檢查 `process.ExitCode == 0` 判定成功,非零則拋出異常並記錄錯誤輸出。

核心原則

優先純托管庫,避免外部進程依賴;若不可避免,嚴格驗證路徑、參數、退出碼、異常捕獲。

C# 調用 WinRAR 解壓文件消失,註冊表路徑不可靠,命令行參數拼接缺陷,SharpCompress 純托管庫推薦,ProcessStartInfo 規範用法。

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