2012-05-16 86 views
7

誰かがStreamReaderをプログラムの現在の作業ディレクトリ内のファイルに向ける方法を教えてくれるのだろうかと思っていました。相対ファイルパスへのStreamreader

E.G. C:\ ProgDirディレクトリに保存されているプログラムProgがあるとします。 \ ProgDirを共有フォルダにコミットします。 ProgDirの中には、Progにインポートしたいファイルが入っている別のディレクトリがあります(例えば\ ProgDir \ TestDir \ TestFile.txt)。ディレクトリへのパスがあってもStreamReaderがそれらのTestFileを読み込めるようにしたいかわった;

(EGは、自分のコンピュータ上で、TESTFILESへのパスが

はC:\ PROGDIR \ TESTDIR \ TESTFILE.TXT

が、他の人のコンピュータ上で、ディレクトリが

です

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

)。

StreamReaderを他人のコンピュータのTestFile.txtから読み込むにはどうすればよいですか?

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?

しかし

は、私は、次の試してみました(明確にするために、ファイル名が変更のみがパスPROGDIRで、変更しないでください)私は "TestFileは現在のコンテキストに存在しません"を取得しています。私はこれにどのようにアプローチすべきか、誰でも考えていますか?

ありがとうございます。

+2

あなたのタイトルはあなたの質問と全く無関係です...ストップウォッチはどこに入っていますか? –

+0

申し訳ありませんが、タイトルは何とか私の最後の質問から引き継がれたと思います。 – gfppaste

答えて

10

フォルダ "TestDir"は常に実行可能ディレクトリにありますか?、

まずFileInfo.FullNameは、絶対パスを与える: もしそうなら、これはあなたにいくつかのことを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);

TESTFILEは、あなたがしようとする前に、オブジェクトを作成する必要があり、その場合には文字列型のtxtという名前のプロパティを持つオブジェクトである場合を除き

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

へこれを使って。

4

を与えるこの

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

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

を試してみてくださいそのため、StreamReaderインスタンス内のファイルの前に完全なディレクトリパスを追加する必要はありません。

第2に、プロパティを持つTestFileというクラスが実際にない限り、FileInfo file = new FileInfo(TestFile.txt);は失敗します。

最後に、ほぼすべてのFileメソッドでは、すでに相対パスが使用されています。だからあなたはJUSTの相対パスでストリームリーダーを使うことができなければなりません。

いくつかのことを試してみてください。

編集:ここでは、試してみてください何:

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");

関連する問題