簡體   English   中英

從Visual Studio 2012中的文件夾打開文件

[英]open file from folder in visual studio 2012

我的桌面上有一個文件夾,里面有文件。 我將其復制到解決方案的文件夾中,在解決方案資源管理器中,我將該文件夾引用到了解決方案中。 但是,我無法使用相對路徑打開該文件夾中的文件。

在解決方案資源管理器中可以看到,來自cs文件的相對路徑為“ ../FolderIAdded/blabla”。 但是在Windows資源管理器中,路徑當然是不同的:

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

在這里,它將是“ FolderIAdded / blabla”

我必須在哪里放置該文件夾?

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

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

一種可能的解決方案是在構建項目時將文件復制到輸出目錄。

文件屬性

另一種選擇是在編譯時將文件嵌入到應用程序的程序集中,盡管這樣可以防止在部署后對其進行編輯。 為此,將“構建操作”設置為“嵌入式資源”,然后可以使用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();
}

我認為從.cs文件寫入相對路徑不是一個好主意。 更好地根據應用程序的執行位置構建路徑 :一個示例,網絡上還有很多其他東西: 如何在.NET控制台應用程序中獲取應用程序的路徑?

(您的應用程序不在解決方案的根文件夾中運行,但位於.exe文件所在的位置。例如,在調試桌面應用程序時,它通常從[solution folder] / bin / debug /運行)

然后確保將要打開的文件屬性復制到輸出目錄設置為始終 復制如果更新則復制 (在解決方案資源管理器中右鍵單擊該文件,然后單擊“屬性”以確保可以訪問它。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM