簡體   English   中英

導致 C# 中錯誤文件的相對路徑

[英]Relative path leading to the wrong file in C#

我有一個名為GameSettings.txt的文本文件,其絕對路徑為:

C:\Users\User\Source\Repos\CLIBattleships\CLIBattleships\General\GameSettings.txt

當我嘗試通過執行以下操作獲取其相對路徑以防止項目從另一台計算機運行時出現問題時:

private static StreamReader sr = new StreamReader(@"General\GameSettings.txt");

它改為返回此路徑:

C:\Users\User\Source\Repos\CLIBattleships\CLIBattleships\bin\Debug\netcoreapp3.1\General\GameSettings.txt

我查找了一些類似的問題here,答案表明可執行文件所在的目錄與當前目錄不同。

少數贊成的答案是:

string filePath = System.IO.Path.GetFullPath("TestFile.txt"); 
StreamReader sr = new StreamReader(filePath);

string dir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

string file = dir + @"\TestDir\TestFile.txt";
// then use file as a parameter for the StreamReader

它們都導致相同的錯誤(至少在上下文上是錯誤的)相對路徑。 請幫忙。

構建項目會編譯您的代碼並將文件復制到 bin 文件夾中。 在“調試”預設(默認)中構建和運行會將 output 您的文件放入bin/Debug/netcoreapp3.1/文件夾中。 這是您的.exe所在的位置以及它的相對路徑所在的位置。

現在,對於您的特定問題,解決此問題的一種骯臟方法是在相對路徑中使用.. 這將使您進入當前目錄的根目錄。 假設您將 state “ ../../file.txt ” 作為路徑。 這將在 bin 文件夾中查找file.txt 但是- 這不是你應該如何解決這個問題。 我只是想提一下這一點,因為這是一個有用的細節,並且在某些情況下您可以利用它來發揮自己的優勢。

我建議將您的文件添加到項目資源或作為純文件。 然后,正如有人已經提到的那樣,您可以將該文件設置為內容,並使 Visual Studio 將其內容復制到 output 文件夾。 這樣,文件將被復制到可執行文件所在的同一目錄中,而您的路徑實際上就是文件的名稱。

但是,使用項目資源不會將文件暴露給文件系統。

暫無
暫無

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

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