我的web解決方案有許多項目。從在啓動項目中找不到的文件中讀取
- 啓動項目被稱爲:「鮑勃」
- 「鮑勃」有提及「吉爾」項目。
- 在「Gill」裏面,有一個文件,我想讀。 「吉爾/單/雙/ hi.txt」
我在鮑勃一些代碼,調用試圖訪問上面的TXT文件中的「吉爾」項目裏面的一些代碼:
File.ReadAllText(@"~/One/Two/hi.txt")
沒有找到該文件。
我已標記文件構建爲
內容
我已標記複製到輸出目錄爲:
複製如果新
訪問文件的方法是什麼?
我的web解決方案有許多項目。從在啓動項目中找不到的文件中讀取
我在鮑勃一些代碼,調用試圖訪問上面的TXT文件中的「吉爾」項目裏面的一些代碼:
File.ReadAllText(@"~/One/Two/hi.txt")
沒有找到該文件。
我已標記文件構建爲
內容
我已標記複製到輸出目錄爲:
複製如果新
訪問文件的方法是什麼?
如果您已經設置複製到輸出目錄中的文件,這將是您的應用程序的bin目錄。
更改伊戈爾略有回答,你可以做
var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin");
var filePath = System.IO.Path.Combine(root, "One", "Two", "hi.txt");
if(System.IO.File.Exists(filePath)) {
var allText = System.IO.File.ReadAllText(filePath);
}
這將解決bin
目錄爲您的應用程序,你的文件將被根深蒂固。
我相信~
是使用.NET的表單,只有Server.MapPath
(https://msdn.microsoft.com/en-us/library/system.web.httpserverutility.mappath(v=vs.110).aspx)
允許您可以通過獲取文件new System.IO.FileInfo(@"One/Two/hi.txt");
try文件的路徑爲
var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\One\\Two\\hi.txt");
並設置 構建操作:無
複製到輸出:複製始終(或是否有更新的複製)
「找不到路徑的一部分'C:\\ One \\ Two \\ hi.txt'。」 – Jimmyt1988
我做了一個更新jimmy,這是因爲我認爲開始的斜線。 – mecek
您需要
~
作爲路徑字符,您必須將它翻譯爲System.IO
名稱空間(如File
或Path
)中的任何類型的網站的根路徑。最好的方法是使用HostingEnvironment。代碼:
var root = System.Web.Hosting.HostingEnvironment.MapPath("~");
var filePath = System.IO.Path.Combine(root, "One", "Two", "hi.txt");
if(System.IO.File.Exists(filePath)) {
var allText = System.IO.File.ReadAllText(filePath);
}
文件標記爲內容和複製在以外的項目(即在又由Web項目中引用)引用將其內容複製相對於Web應用程序的bin
文件夾。在這種情況下添加bin
到根路徑,如下所示:
var root = System.Web.Hosting.HostingEnvironment.MapPath("~/bin");
此代碼嘗試查看「Bob」目錄(啓動項目)而不是「Gill」目錄(放置文件的項目) – Jimmyt1988
@ Jimmyt1988 - 所有內容都與根Web應用程序有關。因此,如果您在包含其他項目的文件中包含該文件,則應該包含相對於發佈路徑(Web應用程序)的文件。由於Web應用程序沒有項目概念(Gill/Bob),這是一個純粹的Visual Studio概念的解決方案,因此從此構建您的路徑。 – Igor
我明白這一點,但是,我希望文件存在於我的項目中。這就是爲什麼我的問題是在運行應用程序時如何獲取文件。我認爲副本輸出本應該有助於此。把它放到輸出目錄中應該可以讓你獲得文件。 – Jimmyt1988
要訪問文件,您需要將其複製到啓動項目的可執行文件目錄中,或者在配置文件中存儲指向文件所在目錄的路徑。或者,您可以將其嵌入爲資源並以此方式訪問它。您的所有啓動項目需求都是對其他項目輸出的DLL的引用,因此它不會看到其他內容文件。 「複製如果更新」只是複製到相對於當前項目的目錄中。我有解決方案之前,有一個專門的「資源」項目,其工作是將資產發佈到正確的位置 – Charleh
@Charleh這使我可以訪問該DLL。 'Assembly.GetExecutingAssembly()'現在怎麼樣? – Jimmyt1988