在 C# 專案中,常需要讀取專案目錄下的 XML、JSON、圖片等檔案。直接使用相對路徑(如 xml/國內城市.xml)在開發環境可能正常,但發布後路徑會改變,導致找不到檔案。
若在 Web 專案(ASP.NET WebForms、MVC)中,且檔案置於專案根目錄下的 xml 資料夾:
// 在 .aspx.cs 或 Controller 中
string path = Server.MapPath("~/xml/國內城市.xml");
在一般類別中需透過 HttpContext.Current:
string path = System.Web.HttpContext.Current.Server.MapPath("~/xml/國內城市.xml");
注意:專案需參考 System.Web.dll。
非 Web 專案應避免使用 Server.MapPath,改用 AppDomain.CurrentDomain.BaseDirectory 或 Application.StartupPath(WinForms)取得執行檔所在目錄,再組合相對路徑:
// WinForms
string path = Path.Combine(Application.StartupPath, "xml", "國內城市.xml");
// WPF / Console
string path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "xml", "國內城市.xml");
若檔案不需外部修改,可將其設為「內嵌資源」,透過 Assembly.GetManifestResourceStream 讀取,完全不受路徑影響。
Server.MapPath("~/*")AppDomain.BaseDirectory + 相對路徑掌握正確路徑解析方式,讓專案在開發、測試、生產環境都能穩定讀取檔案。