2016-05-15 51 views
0

我發現自己不得不依賴於必須使用一些本地文件夾。通常沒有問題,但主要問題是如果將項目轉移到另一臺機器,即使在開發過程中結構也會報告錯誤。C#如何調用文件的相對地址而不是絕對地址

錯誤是,當我從文件讀取時,頁面無法顯示在本地網站上,IO錯誤。

的目錄如下

C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset 

有問題的文件夾

  • Master音頻
  • 圖片
  • 用戶音頻

File Location

,因爲他們已經習慣

private String folderPlay = @"C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset\Master Audio\"; 
private String folderRecord = @"C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset\User Audio\"; 
private String folderImages = @"C:\Users\Keith\OneDrive\Documents\Project 2016\Lingerie\Lingerie\Corset\Corset\Images\"; 

我希望做的是能夠相對於這些代碼文件調用實際的文件夾?此外,如果它沒有太多的麻煩可能會小記被如此重視我能理解/

回答

1

僅使用路徑在您的項目,而不是整個物理路徑

private String folderPlay = @"~/Master Audio"; 
private String folderRecord = @"~/User Audio"; 
private String folderImages = @"~/Images"; 

,我的建議是像Master_Audio使用路徑, User_Audio。不要把字

0

我發現在類似的情況是有用的實際注入內容的根目錄到需要知道具體的資源位置的類之間空間:

例如

class Foo{ 

    private string readonly _contentRoot; 

    public Foo (string contentRoot) 
    { 
     _contentRoot = contentRoot 
    } 

    public void DoSomethingWithImage() 
    { 
     string imgRelativePath = "/img/img1.png"; 
     string imgPath = Path.Combine(_contentRoot, imgRelativePath); 

     // do something with imgPath   
    } 
} 

這樣做的好處是您現在可以爲您的方法編寫測試(否則可能會很困難)。有時單元測試框架會將庫複製到臨時位置,但您仍然想要運行測試。

您可以從多個位置解析的根目錄下,這取決於你如何運行代碼:

  • 單元測試,使用Assembly.GetExecutingAssembly().GetName().CodeBase
  • 對於Web應用程序HttpRuntimeHttpContext
  • 對於Windows應用AppDomain.BaseDirectory或類似

憑經驗:

  • 你不應該有任何硬編碼的絕對路徑(疼痛測試,另一臺機器上運行,部署)
  • 相反,使用相對路徑(通常是相對於項目的根或根/內容)