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

C# 伺服器端自動解壓 RAR:調用 WinRAR.exe 實現無人值守解壓縮

     編輯:關於C#

應用場景

托管伺服器常需提供檔案上傳/下載功能替代 FTP。使用者上傳 .rar 封裝後,伺服器需自動解壓至指定目錄、可選刪除原壓縮檔,以利後續處理。

核心實作:Process 啟動 WinRAR.exe

public void DecompressRAR(string rarPath, string destDir, bool deleteAfter)
{
    string winRarExe = Server.MapPath(@"../EnterpriseCustom/WinRAR.exe"); // 需預先部署
    if (!File.Exists(winRarExe))
        throw new Exception("伺服器缺少 WinRAR.exe,請聯繫管理員!");

    destDir = EnsureTrailingSlash(destDir);
    try
    {
        Process p = new Process();
        p.StartInfo.FileName = winRarExe;
        // x=解壓 -inul=無訊息 -y=全選是 -o+=覆蓋
        p.StartInfo.Arguments = $"x -inul -y -o+ \"{rarPath}\" \"{destDir}\"";
        p.Start();
        p.WaitForExit(); // 同步等待結束
    }
    catch (Exception ex)
    {
        throw new Exception("解壓失敗,請檢查寫入權限或檔案損毀:" + ex.Message);
    }

    if (deleteAfter) File.Delete(rarPath);
}

private string EnsureTrailingSlash(string path) =>
    path.EndsWith("\\") ? path : path + "\\";

關鍵參數解析

參數含義
x解壓縮(保留目錄結構)
-inul禁用所有訊息視窗,適合無人值守
-y所有提示預設「是」(覆蓋、繼續等)
-o+覆蓋既有檔案不提示

部署與權限提醒

  • 將 WinRAR.exe 放置於網站可存取路徑(如 EnterpriseCustom 目錄)。
  • 應用程式集區身分識別需具備該目錄及解壓目標目錄的讀寫權限。
  • 若伺服器為 64 位元,建議使用 64 位版 WinRAR 避免 WoW64 重導向問題。

擴充建議

若不想依賴外部執行檔,可改用純 managed 庫 SharpCompress 或 SevenZipSharp,支援更多格式(zip/7z/gzip)且無需部署額外 exe。

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