11

プログラムの現在の作業ディレクトリ内のファイルにStreamReaderをポイントする方法を誰かに教えてもらえないかと思いました。

例:プログラムProgをディレクトリ "C:\ProgDir\"に保存したとします。「\ProgDir」を共有フォルダにコミットします。ProgDirの中には、Progにインポートしたいファイルを含む別のディレクトリがあります(例: "\ ProgDir \ TestDir \ TestFile.txt")。StreamReaderがそれらのTestFilesを読み取れるようにしたいのですが、ディレクトリが変更されました。

(例えば、私のコンピューターでは、テストファイルへのパスは

C:\ ProgDir \ TestDir \ TestFile.txt

しかし、他の人のコンピュータでは、ディレクトリは

C:\ dev_code \ ProgDir \ TestDir \ TestFile.txt

)。

StreamReaderを他の人のコンピューターのTestFile.txtから読み取ることができるようにするにはどうすればよいですか?(明確にするために、ファイル名は変更されません。唯一の変更はパス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);

(これをプル:現在の作業ディレクトリからの相対パスを取得していますか?

しかし、「TestFileは現在のコンテキストに存在しません」というメッセージが表示されます。私がこれにどのように取り組むべきかについて誰かが何か考えを持っていますか?

ありがとうございました。

4

7 に答える 7

14

フォルダ「TestDir」は常に実行可能ディレクトリにありますか?もしそうなら、これを試してみてください

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

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

これにより、exeのパスに加えて、その中のフォルダとテキストファイルが表示されます。

于 2012-05-16T17:43:41.003 に答える
10

この方法を使用できますGetFullPath()。これを試して:

 string filePath = System.IO.Path.GetFullPath("TestFile.txt");
 StreamReader sr = new StreamReader(filePath);
于 2012-05-16T17:37:39.417 に答える
6

いくつかのこと:

まず、FileInfo.FullNameファイルの絶対パスを指定するため、StreamReaderインスタンスのファイルの前に完全なディレクトリパスを追加する必要はありません。

次に、プロパティで呼び出さFileInfo file = new FileInfo(TestFile.txt);れるクラスが実際にない限り、失敗するはずです。TestFiletxt

最後に、ほとんどすべての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");

于 2012-05-16T17:44:45.507 に答える
3

FileInfo コンストラクターは、文字列型の単一のパラメーターを取ります。TestFile.txtを引用符で囲んでみてください。

変化する

FileInfo file = new FileInfo(TestFile.txt);

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

TestFileがtxtstring型という名前のプロパティを持つオブジェクトでない限り、その場合は、使用する前にオブジェクトを作成する必要があります。

于 2012-05-16T17:42:44.720 に答える
1

私は同様の問題を抱えていて、この方法を使用してそれを解決しました:

StreamReader sr = File.OpenText(MapPath("~/your_path/filename.txt"))

これは、さまざまな環境で作業するためにファイルへのより相対的なパスが必要な場合に適したオプションです。

于 2020-10-02T20:02:00.437 に答える
0

path.combineを使用して、ビルドする現在のディレクトリを取得し、必要なファイルパスを組み合わせることができます

 new StreamReader(Path.Combine(Environment.CurrentDirectory, "storage"));
于 2019-07-19T07:19:38.403 に答える
0

最も簡単な方法は、ファイル名(フルパスではなく)と「TestDir」を使用して、StreamReaderに相対パスを指定することです。

var relativePath = Path.Combine(".","TestDir",fileName);
using (var sr = new StreamReader(relativePath))
{
   //...
}
于 2019-07-19T07:39:55.523 に答える