這裏有兩個文件夾,後面是我如何做到這一點:使用Server.Mappath去從根本
HttpContext.Current.Server.MapPath(@"~\~\~\Content\")
HI知道「」是爲項目的根源,但如何去回幾個文件夾?
這裏有兩個文件夾,後面是我如何做到這一點:使用Server.Mappath去從根本
HttpContext.Current.Server.MapPath(@"~\~\~\Content\")
HI知道「」是爲項目的根源,但如何去回幾個文件夾?
如果你真的需要祖父路徑,可以使用3210從根路徑得到它:
string root = Server.MapPath("~");
string parent = Path.GetDirectoryName(root);
string grandParent = Path.GetDirectoryName(parent);
但是你的web應用程序很可能將沒有權限來讀取或寫入那裏 - 我我不確定你會用它做什麼。
root,parent和grandParent都返回相同的路徑。爲什麼? – 2012-03-15 18:22:32
真的嗎?我沒有一個ASP.NET站點來進行測試,但我在LinqPad中嘗試了一個例子,從c:\ inetpub \ wwwroot \ myapp開始,它工作正常。如果Path被設置爲限制你 - 畢竟它只是處理一個字符串,我會感到驚訝。所以我沒有在確切的環境中測試過它,但如果它不工作,我感到很驚訝。 (我現在意識到我的代碼假設root沒有結尾的斜槓 - 如果存在的話,你可能需要另外一個Path.GetDirectoryName來擺脫它。) – Rup 2012-03-15 18:27:06
從~
的網站根目錄開始,並指定完整路徑:~/Archive/Content
。
由於安全限制,您不能回到站點根目錄以上,另請參閱this article從其他解決方案。
IIS有目的地阻止直接在站點路徑之外提供內容。但是,您可以在IIS中創建一個虛擬目錄,並將ISAPI重寫指向該目錄。例如,創建一個名爲/ staticfiles的指向c:\ test \ data \ static-files的虛擬目錄。就IIS而言,這直接離開了名爲/ staticfiles的文件夾中的站點根目錄。
這對我有幫助嗎?它不會回頭。 – 2012-03-15 18:15:59
回到哪裏?從網站根目錄開始指定** Content **的路徑。 – 2012-03-15 18:33:05
我寫命令的文件與網站不在同一個項目中。 – 2012-03-15 20:05:19
由於您使用的MapPath你正在返回從虛擬路徑(/)的物理路徑(\)可以使用Parent.Parent.FullName
string grandParent = new DirectoryInfo(HttpContext.Current.Server.MapPath("~/")).Parent.Parent.FullName;
。
創建DirectoryInfo對象或使用從您的子應用程序根開始的Path實用工具方法不一定會給您所期望的,除非您的虛擬父級和虛擬祖父級具有與您的物理目錄結構相同的層級。
我的應用程序沒有物理嵌套以匹配Url深度。如果涉及虛擬目錄,情況也可能如此。
假設祖父母的應用程序是兩個虛擬文件夾了,這將讓你的物理路徑...
string physicalGrandparentPath = HttpContext.Current.Server.MapPath("~/../../");
使用,這將讓你從任何虛擬目錄洗牌遊戲在IIS安裝正在進行安全。
我用這個來看看我能走多遠。我沒有得到一個HttpException,直到我試圖超過wwwroot。
認爲你想'@「.. \ .. \ .. \ Content \」 – ediblecode 2012-03-15 18:09:20
@danRhul我得到錯誤「你不能使用領先...」 – 2012-03-15 18:10:17
這是爲了安全。 – 2012-03-15 18:10:49