2014-01-31 95 views
1

我的桌面上有一個文件夾,裏面有文件。我將它複製到我的解決方案的文件夾中,並在解決方案資源管理器中將該文件夾引用到解決方案中。但是,我不能用相對路徑打開該文件夾中的文件。從視覺工作室的文件夾中打開文件2012

從解決方案資源管理器中可以看出,cs文件的相對路徑是「../FolderIAdded/blabla」。但是,在Windows資源管理器,路徑是differen當然是:

Solutionfolder 
- SolutionFolder.sln 
- Solutionfolder.v11.suo 
- SolutionFolder 
-- bin 
-- obj 
-- Properties 
-- TheFolderIAdded 
-- App.config 
-- Form1.cs 
-- etc. 

在這裏,這將是「FolderIAdded /布拉布拉」

在哪裏我已經把該文件夾?

我的目標:我希望能夠用相對路徑在c#代碼中的該文件夾中打開文件。

回答

1

我不認爲從.cs文件編寫相對路徑是一個好主意。 更好的建設,其中應用程序執行上的路徑基地: 一個例子,還有很多其他的網站:How can I get the application's path in a .NET console application?

(您的應用程序不能在解決方案的根文件夾中運行,但其中的.exe文件locatated。例如,當您調試一個桌面應用程序,它從[解決方案文件夾] /斌/調試/)通常運行

然後確保文件要打開屬性複製到輸出目錄設置爲一直拷貝如果複製較新的(右鍵單擊解決方案資源管理器中的文件,然後單擊「屬性」以確保訪問它。)

+0

嘿,嘿!我終於明白了。我用你描述的方式工作,通過獲取應用程序路徑,然後設置屬性來始終複製。我戈特說,雖然,Eclipse是比較容易的方式,當談到這個...只是因爲我總是讀到VS是這樣一個夢幻般的IDE ......但wlel,它的工作。非常感謝! – user2791739

3

假設您的程序運行在您的源代碼所在的目錄中。事實並非如此。根據您的配置,您的程序將從Solutionfolder \ bin中的目錄執行。

一個可能的解決方案是在構建項目時將文件複製到輸出目錄。

File properties

2

另一種方法是將文件嵌入到你的應用程序在編譯時彙編,雖然這在部署後排除他們的編輯。爲此,請將構建操作設置爲「嵌入式資源」,然後使用Assembly類的GetManifestResourceStream方法訪問它們。你需要給它的文件名會從項目結構中的路徑獲得,所以在你的例子那就是「TheFolderIAdded.Filename.ext」。

是的,這是一個點,而不是反斜槓。

假設文件嵌入在同一組件要讀取它們的代碼是,代碼將看起來像

var assembly = Assembly.GetExecutingAssembly(); 
using (var stream = 
    assembly.GetManifestResourceStream("TheFolderIAdded.Filename.ext")) 
using (var reader = new StreamReader(stream)) { 
    string fileContents = reader.ReadToEnd(); 
}