2012-05-16 102 views
7

我想知道是否有人可以告訴我如何將StreamReader指向程序當前工作目錄內的文件。Streamreader到相對文件路徑

E.G.假設我有程序Prog,保存在目錄C:\ ProgDir中。我將\ ProgDir提交到共享文件夾。裏面ProgDir是另一個包含我想要導入到Prog的文件的目錄(例如\ ProgDir \ TestDir \ TestFile.txt)我想使它成爲StreamReader可以讀取這些TestFiles,即使目錄的路徑有改變;

(例如,我的電腦上,路徑到Testfiles是

C:\ ProgDir \ TESTDIR \ TESTFILE.TXT

,但其他人的計算機上,該目錄是

C:\ dev_code \ ProgDir \ TESTDIR \ TESTFILE.TXT

)。

如何讓StreamReader成爲從其他人的計算機上的TestFile.txt讀取的ale? (澄清,文件名不改變,唯一的變化是路徑ProgDir)

我試過如下:

string currentDir = Environment.CurrentDirectory; 
DirectoryInfo directory = new DirectoryInfo(currentDir); 
FileInfo file = new FileInfo(TestFile.txt); 

string fullDirectory = directory.FullName; 
string fullFile = file.FullName; 

StreamReader sr = new StreamReader(@fullDirectory + fullFile); 

(從拉這樣的:Getting path relative to the current working directory?

但我得到「TestFile不存在於當前的上下文中」。任何人有任何想法,我應該如何處理這個?

謝謝。

+2

您的標題看起來與您的問題完全無關...... Stopwatch在哪裏進來? –

+0

對不起,我認爲標題從最後一個問題繼續存在。 – gfppaste

回答

10

文件夾「TestDir」是否總是在可執行目錄中? 如果是的話,試試這個

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

    string file = dir + @"\TestDir\TestFile.txt"; 

這會給你的exe文件的路徑加上裏面的文件夾和文本文件

7

您可以使用GetFullPath()方法。試試這個:

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

Streamreader sr = new StreamReader(filePath); – gfppaste

+0

@gfppaste這是一個錯字。它是StreamReader而不是Streamreader。 – Zenadix

2

FileInfoconstructor需要字符串類型的單個參數。嘗試將引號放在TestFile.txt中。

變化

FileInfo file = new FileInfo(TestFile.txt);

FileInfo file = new FileInfo("TestFile.txt");

除非TESTFILE是一個String類型的名爲txt財產,在這種情況下,你必須嘗試之前創建的對象的對象用它。

4

有幾件事情:

首先,FileInfo.FullName給出了絕對路徑該文件,因此您無需在StreamReader實例中的文件之前預先填充完整的目錄路徑。

其次,FileInfo file = new FileInfo(TestFile.txt);應該失敗,除非您實際上有一個名爲TestFile的類和txt屬性。

最後,幾乎每一個File方法,他們已經使用相對路徑。所以你應該能夠在相對路徑上使用流讀取器。

試試這些東西,讓我們知道。

編輯:這是你應該嘗試什麼:

FileInfo file = new FileInfo("TestFile.txt"); 
StreamReader sr = new StreamReader(fullFile.FullName); 
//OR 
StreamReader sr = new StreamReader("TestFile.txt"); 

然而,有一兩件事我注意到的是,TESTFILE位於TestDir。如果您的可執行文件位於ProgDir中,那麼它仍然會失敗,因爲您的相對路徑不正確。

嘗試將其更改爲TestDir\TestFile.txt。 IE:StreamReader sr = new StreamReader("TestDir\TestFile.txt");