2016-08-26 45 views
1

我的web解決方案有許多項目。從在啓動項目中找不到的文件中讀取

  • 啓動項目被稱爲:「鮑勃」
  • 「鮑勃」有提及「吉爾」項目。
  • 在「Gill」裏面,有一個文件,我想讀。 「吉爾/單/雙/ hi.txt」

我在鮑勃一些代碼,調用試圖訪問上面的TXT文件中的「吉爾」項目裏面的一些代碼:

File.ReadAllText(@"~/One/Two/hi.txt") 

沒有找到該文件。


我已標記文件構建爲

內容

我已標記複製到輸出目錄爲:

複製如果新

訪問文件的方法是什麼?

+0

要訪問文件,您需要將其複製到啓動項目的可執行文件目錄中,或者在配置文件中存儲指向文件所在目錄的路徑。或者,您可以將其嵌入爲資源並以此方式訪問它。您的所有啓動項目需求都是對其他項目輸出的DLL的引用,因此它不會看到其他內容文件。 「複製如果更新」只是複製到相對於當前項目的目錄中。我有解決方案之前,有一個專門的「資源」項目,其工作是將資產發佈到正確的位置 – Charleh

+0

@Charleh這使我可以訪問該DLL。 'Assembly.GetExecutingAssembly()'現在怎麼樣? – Jimmyt1988

回答

0

如果您已經設置複製到輸出目錄中的文件,這將是您的應用程序的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目錄爲您的應用程序,你的文件將被根深蒂固。

1

try文件的路徑爲

var filePath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "bin\\One\\Two\\hi.txt"); 

並設置 構建操作:無

複製到輸出:複製始終(或是否有更新的複製)

+0

「找不到路徑的一部分'C:\\ One \\ Two \\ hi.txt'。」 – Jimmyt1988

+0

我做了一個更新jimmy,這是因爲我認爲開始的斜線。 – mecek

0

您需要

  1. 確保文件已被複制到你的網站。如果它不存在,你不能從它讀取。
  2. 正確放置文件路徑。正在執行的代碼並不直接知道~作爲路徑字符,您必須將它翻譯爲System.IO名稱空間(如FilePath)中的任何類型的網站的根路徑。最好的方法是使用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"); 
+0

此代碼嘗試查看「Bob」目錄(啓動項目)而不是「Gill」目錄(放置文件的項目) – Jimmyt1988

+0

@ Jimmyt1988 - 所有內容都與根Web應用程序有關。因此,如果您在包含其他項目的文件中包含該文件,則應該包含相對於發佈路徑(Web應用程序)的文件。由於Web應用程序沒有項目概念(Gill/Bob),這是一個純粹的Visual Studio概念的解決方案,因此從此構建您的路徑。 – Igor

+0

我明白這一點,但是,我希望文件存在於我的項目中。這就是爲什麼我的問題是在運行應用程序時如何獲取文件。我認爲副本輸出本應該有助於此。把它放到輸出目錄中應該可以讓你獲得文件。 – Jimmyt1988

相關問題