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

C# 取得目前路徑的 7 種常見方法完整比較

     編輯:關於C語言

在 C# 專案中「取得目前路徑」看似簡單,但不同 API 回傳的含義卻大不相同:有的是執行檔完整路徑、有的是工作目錄、有的是應用程式基底目錄。搞混它們常導致檔案找不到、部署失敗等難以除錯的問題。本文整理 7 種常用取得路徑的方式,並以實測輸出對照差異,幫助你精準選用。

7 種取得路徑的 API 快速對照

API回傳內容典型用途
Process.GetCurrentProcess().MainModule.FileName目前執行檔完整路徑(含檔名)需要知道執行檔實體位置時
Environment.CurrentDirectory進程啟動時的工作目錄(可讀寫)相對路徑解析基準、命令列工具
Directory.GetCurrentDirectory()目前工作目錄(同 Environment.CurrentDirectory)同上,但為靜態方法呼叫風格
AppDomain.CurrentDomain.BaseDirectory應用程式基底目錄(以 \ 結尾)Web/桌面應用尋找組態檔、相依組件
AppDomain.CurrentDomain.SetupInformation.ApplicationBase同 BaseDirectory,屬性來源不同進階 AppDomain 設定檢查
Application.StartupPath (WinForms)啟動執行檔所在目錄(不含尾端 \)WinForms 專案常用
Application.ExecutablePath (WinForms)啟動執行檔完整路徑(含檔名)WinForms 專案需完整路徑時

實測程式碼與輸出範例

var paths = new Dictionary<string, string> {
    ["Process.MainModule.FileName"] = Process.GetCurrentProcess().MainModule.FileName,
    ["Environment.CurrentDirectory"] = Environment.CurrentDirectory,
    ["Directory.GetCurrentDirectory()"] = Directory.GetCurrentDirectory(),
    ["AppDomain.BaseDirectory"] = AppDomain.CurrentDomain.BaseDirectory,
    ["AppDomain.ApplicationBase"] = AppDomain.CurrentDomain.SetupInformation.ApplicationBase,
    ["Application.StartupPath"] = Application.StartupPath,
    ["Application.ExecutablePath"] = Application.ExecutablePath
};

foreach (var kv in paths)
    Console.WriteLine($"{kv.Key}: {kv.Value}");

假設專案建置於 D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\,典型輸出如下:

Process.MainModule.FileName: D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\XMLAndXsd.vshost.exe
Environment.CurrentDirectory: D:\work\prj\VP-VPlatform\XMLAndXsd\bin\Release
Directory.GetCurrentDirectory(): D:\work\prj\VP-VPlatform\XMLAndXsd\bin\Release
AppDomain.BaseDirectory: D:\work\prj\VP-VPlatform\XMLAndXsd\bin\Release\
AppDomain.ApplicationBase: D:\work\prj\VP-VPlatform\XMLAndXsd\bin\Release\
Application.StartupPath: D:\work\prj\VP-VPlatform\XMLAndXsd\bin\Release
Application.ExecutablePath: D:\work\prj\VP-VPlatform\XmlAndXsd\bin\Release\XMLAndXsd.EXE

核心差異與選用建議

  • 執行檔完整路徑:Process.MainModule.FileName、Application.ExecutablePath 結果相同,前者適用通用專案,後者限 WinForms。
  • 目錄而非檔案:BaseDirectory、ApplicationBase 以反斜線結尾,適合直接 Path.Combine 組合相對路徑;StartupPath、CurrentDirectory 無尾端斜線。
  • 工作目錄會變:Environment.CurrentDirectory 可被 Directory.SetCurrentDirectory 或外部程式改變,不可 作為固定資源路徑依據。
  • ASP.NET / Core 專案:優先使用 AppDomain.BaseDirectory 或 IWebHostEnvironment.ContentRootPath,避免依賴 WinForms API。

常見踩坑情境

  1. 用 CurrentDirectory 讀取專案根目錄下的設定檔 → 使用者從別處啟動程式時失敗。
  2. 直接串字串 BaseDirectory + "config.json" → 缺少路徑分隔符導致路徑錯誤,請改用 Path.Combine。
  3. 單元測試專案執行時 BaseDirectory 指向測試執行器目錄 → 需透過 Assembly.GetExecutingAssembly().Location 定位專案輸出目錄。

掌握各 API 的語意差異,並固定專案內部的「取得路徑」慣用模式,能大幅減少部署與執行時期的路徑相關 Bug。

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