2011-03-17 113 views
3

在我寫的c#類中,我有一個照片屬性,如果圖像存在,則返回照片源(否則不包含任何默認圖像)。在我的代碼使用方法:File.Exists使用錯誤的根路徑?

public string Photo 
    { 
     get 
     { 
      string source = "~/images/recipes/" + id + ".jpg"; 

      if (File.Exists(source)) 
       return "~/images/recipes/" + id + ".jpg"; 
      else 
       return ""; 
     } 
    } 

如果我得到這個圖像的FileInfo()信息,我看到,我試圖找到在以下目錄中這一形象:C:\ Program Files文件(x86)的\ Common Files文件\ Microsoft Shared \ DevServer \ 10.0 \〜\ images \ recipe

當然,映像不在該目錄中,而File.Exists正在返回錯誤的值。但我該如何解決這個問題?

+0

這個問題被重新標記(我猜?)到ASP.NET,但你需要指定這是否確實是ASP,或者你想讓Unix的'〜/'約定在Windows上工作。 – kprobst 2011-03-17 20:01:16

+0

引用ASP.NET和上下文的原始問題標題看起來像是使用'〜/'作爲應用程序根目錄,而不是Unix約定。 – 2011-03-17 20:09:32

回答

11

試試這個:

if(File.Exists(System.Web.HttpContext.Current.Server.MapPath(source))) 
+0

我無法訪問此類中的Server對象。 – Jens 2011-03-17 20:05:34

+0

'System.Web.HttpContext.Current.Server.MapPath'將與'Server.MapPath'相同。 – 2011-03-17 20:06:44

+0

使用System.Web顯然做到了 – Jens 2011-03-17 20:08:12

2

您需要的相對路徑返回映射到物理路徑:

string source = HttpContext.Current.Server.MapPath("~/images/recipes/" + id + ".jpg"); 
0

你將不得不使用:

Server.MapPath(source) 

正如你不能100%確定代碼將從哪裏運行,即。它在開發和生產服務器上會有所不同。你也確定〜/在Windows中工作?不會被解釋爲名爲〜的目錄嗎?除非這是你想要的。

+0

Server.MapPath應該將'〜'解釋爲'ApplicationRoot'。否則,是的,它被視爲一個目錄名稱。 – 2011-03-17 20:01:00