2010-07-16 428 views
1

這應該很簡單,但它不起作用。ASP.net相對路徑不工作?

我在我的項目的根下有一個文件。我想這樣稱呼它。

GetWorkbook("tplBud806_wRevenue.xls") 

我將項目發佈到服務器並嘗試運行它,服務器說它找不到它。

Could not find file 'c:\windows\system32\inetsrv\tplBud806_wRevenue.xls'. 

這不是它應該採取的路徑。它應該在E:\ IIServer \ rootwww \ reports \ tplBud806_wRevenue.xls下。

我認爲相對路徑應該從項目運行的路徑開始。我也嘗試過。

GetWorkbook("/tplBud806_wRevenue.xls") 
GetWorkbook("\tplBud806_wRevenue.xls") 
GetWorkbook("~/tplBud806_wRevenue.xls") 
GetWorkbook("~\tplBud806_wRevenue.xls") 

有沒有我失蹤的一些設置?這應該是簡單的...

+0

你想讓人們能夠通過URL直接到達文件嗎?如果沒有,你可能想把它放在App_Data而不是你的網站的根目錄下。 – tvanfosson 2010-07-16 14:31:40

+0

我真的不在乎他們是否得到這個文件,它現在是一個測試項目。但是,謝謝你們的支持,因爲這將最終生產。 – 2010-07-16 14:41:17

回答

7
GetWorkBook(Server.MapPath("tplBud806_wRevenue.xls")); 
+0

爲了解釋,請參閱John Weldon的答案。 – 2010-07-16 14:30:07

+0

對於遇到此解決方案的MVC用戶,請檢查此問題是否有其他方法:http://stackoverflow.com/questions/4616646/specifying-relative-file-location-in-web-config-for-use-by-standard -c-sharp-clas – mao47 2014-01-09 18:39:20

3

GetWorkbook不是ASP.NET函數,它可能默認爲調用它的進程啓動的文件夾。這種情況下的過程是一個IIS進程,可能在該文件夾中啓動。

+0

感謝您的解釋。我不太熟悉ASP.net,所以這對我來說是新的。 – 2010-07-16 14:41:57

1

您的應用程序正在位於錯誤目錄中的w3wp.exe加載的AppDomain中運行。這意味着試圖查找任何文件將在該目錄中開始。正如其他人所述,您應該使用Page.MapPath。它告訴應用程序開始查看您的aspx所在的文件夾。

1

GetWorkBook(Server.MapPath("~/tplBud806_wRevenue.xls"));如果.XLS文件位於項目的根目錄下。

您也可以使用~與ResolveURL()結合使用來訪問站點中的URL。所以~會被你的項目的根URL來代替

例子:

ResolveURL("~\tplBud806_wRevenue.xls")

將被轉化爲 http://myproject.url/website/tplBud806_wRevenue.xls

如果您需要磁盤訪問,就像在你的榜樣,使用Server.MapPath

看看這個SO post瞭解更多關於Server.MapPath