2010-01-05 55 views
2

這可能是一些頭腦麻木明顯,但我是新來的C#,所以要溫柔......不能讓我的頭一輪相對路徑

我有(理論上)解析文本的應用文件放入數組中。儘管文本文件是aspx文件的同行,但我無法獲得相對路徑。不知道它是否有任何區別(我不假設),但我使用的是代碼隱藏。

我的文件夾結構如下所示:

  • 的Default.aspx
  • default.aspx.cs
  • default.aspx.designer.cs
  • album.cs
  • albums.txt
  • web.config

這是我使用的代碼:

protected void Page_Load(object sender, EventArgs e) 
    { 

     string[] allLines = File.ReadAllLines(@"Albums.txt"); 
     Album[] Albums = new Album[allLines.Length]; 
     for (int i = 0; i < allLines.Length; i++) 
     { 
      string[] lineSplit = allLines[i].Split(','); 
      Albums[i] = new Album(); 
      Albums[i].ID = Convert.ToInt32(lineSplit[0]); 
      Albums[i].title = lineSplit[1]; 
      Albums[i].keyName = lineSplit[2]; 
     } 
    } 

然而,當我建立它,我得到一個錯誤說albums.txt無法找到,它失敗。

任何指針將不勝感激。

+0

您是否嘗試過使用Server.MapPath(「Albums.txt」) – Omu 2010-01-05 18:48:55

+0

這是網站**網站嗎?或web **項目**?即有沒有csproj這個?我想知道你是否還沒有告訴它,txt文件是要包含在構建輸出中。 (複製到輸出目錄) – 2010-01-05 18:52:10

+0

你是一個傳奇!工作過一種享受。 新來堆棧溢出太 - 我需要做一些分配點/確認此修復是正確的? – Ben 2010-01-05 18:54:05

回答

3

Server.MapPath指定映射到物理目錄的相對路徑或虛擬路徑。

* Server.MapPath(".") returns the current physical directory of the file (e.g. aspx) being executed 
* Server.MapPath("..") returns the parent directory 
* Server.MapPath("~") returns the physical path to the root of the application 
* Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application) 

一個例子:

比方說,你指出一個網站的應用程序(http://www.example.com/)到

C:\的Inetpub \ wwwroot文件

,並安裝在你的店鋪的應用程序(子網絡虛擬目錄在IIS中,標記爲應用程序)

D:\ WebApps \ shop

如果,例如,可以調用在使用Server.Mappath以下請求:

http://www.example.com/shop/product/GetProduct.aspx?id=2342

然後,

* Server.MapPath(".") returns D:\WebApps\shop\products 
* Server.MapPath("..") returns D:\WebApps\shop 
* Server.MapPath("~") returns D:\WebApps\shop 
* Server.MapPath("/") returns C:\Inetpub\wwwroot 
* Server.MapPath("/shop") returns D:\WebApps\shop 

如果路徑與任一前向(/)或反斜槓(開始), MapPath方法返回一個路徑,就像Path是完整的虛擬路徑一樣。

如果Path未以斜槓開始,則MapPath方法將返回相對於正在處理的請求的目錄的路徑。

注意:在C#中,@是逐字符串字符串運算符,意味着該字符串應該「按原樣」使用,並且不針對轉義序列進行處理。

Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\"), Server.MapPath("/"). What is the difference?

2

而不只是文件名,使用Server.MapPath(filename)得到充分的文件路徑。

如果文件位於不同的目錄中,則可以使用Server.MapPath("~/path/to/the/file.txt"),其中〜對應於Web應用程序的根文件夾。

1

ReadAllLines採用絕對路徑 - 您提供的是一個相對路徑。 Server.MapPath用於將相對路徑轉換爲絕對路徑。 無論代碼位於何處,Server.MapPath(「〜/ Albums.txt」)都會給出正確的值。此外,通過將該文件放在〜\ App_Data下,您可以防止文件本身的直接下載,以及在應用程序運行時使應用程序不再受到該文件的重複更新(更新至App_Data內容不生成文件變更通知)。