2011-06-20 88 views
2

我正在處理一個asp.net文件瀏覽器,該瀏覽器以遞歸方式遍歷文件夾並列出其文件和子文件夾。不過,我也想讓文件可以下載/查看,它在那裏我似乎有問題。我無法獲得正確的地址轉換。我有以下配置和代碼。ASP.NET文件瀏覽器路徑轉換

編輯

的問題是,所創建的

Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>"); 

的鏈接不要鏈接到文件正確。還有一個額外的問題,我需要解決:一些文件名包含空格。

的Web.config

<appSettings> 
    <add key="UploadDirectory" value="~/Upload/"/> 
</appSettings> 

FileBrowser.aspx.cs

public partial class FileBrowser : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    {   
     DirectoryInfo di = new DirectoryInfo(Request.MapPath(System.Configuration.ConfigurationManager.AppSettings["UploadDirectory"])); 
     if (Directory.Exists(di.ToString())) 
      printDir("", di.ToString()); 

    } 

    protected void printDir(string space, string dir) 
    { 
     DirectoryInfo di = new DirectoryInfo(dir); 
     foreach (DirectoryInfo d in di.GetDirectories()) 
     { 
      Response.Write(space + "<a href=" + d.ToString() + ">" + d.ToString() + "</a><br/>"); 
      printDir(space + "&nbsp;&nbsp;&nbsp;&nbsp;", dir + "\\" + d.ToString()); 
     } 

     foreach (FileInfo d in di.GetFiles()) 
     { 
      Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>"); 
     } 
    } 
} 
+0

到底是什麼問題? –

+0

鏈接。我現在編輯了這個問題,使其更清晰。抱歉。 – Teletha

+0

我認爲與查克的答案你的第一個問題得到解決,如果文件路徑有空格然後url編碼它,然後urldecode它使用。 – Naresh

回答

1

問題是,當爲子文件夾中的文件渲染路徑時,您使用的路徑如「Upload/filename」;這是不正確的。

實際上,您應該嘗試從當前的di變量中獲取目錄名稱。也就是說,如果您目前正在瀏覽「上傳」文件夾中的「內部」文件夾,則您的路徑將類似於「上傳/內部/文件名」。

這就是你需要做出改變:

Response.Write(space + "<a href=" + "Upload/" + d.Name + ">" + d.FullName + "</a><br/>"); 

在上面的代碼行,你需要創建一個動態的,這取決於在雙變量路徑href網址。執行以下操作:

  1. 獲取雙通道
  2. 獲取「\上傳」後的子字符串中的雙路徑
  3. 斯普利特「\」上述子;這會給你任何子目錄。
  4. 使用上述子目錄建立文件的新路徑。

我希望這會有所幫助。

1

你有沒有嘗試過這樣的事情?

foreach (FileInfo d in di.GetFiles()) 
{ 
    Response.Write(space + "<a href=" + Server.MapPath("~/Upload/") + d.Name + ">" + d.FullName + "</a><br/>"); 
} 
+0

謝謝你的幫助。是的,我有,似乎沒有工作。 – Teletha

+0

我知道爲什麼現在:它不適用於子文件夾。 – Teletha

+0

@Teletha:查看我的答案如何包含子文件夾 – abatishchev

1

這是更可讀:

foreach (FileInfo d in di.GetFiles("*", SearchOption.AllDirectories)) // includes subfolders 
{ 
    Response.Write(String.Format("{0}<a href=\"{1}\">{2}</a>", space, Server.MapPath("~/Upload/") + d.Name, d.FullName); 
} 

也可以嘗試DirectoryInfo.EnumerateFile()