11

我想知道,是否有人能告诉我如何将 StreamReader 指向程序当前工作目录中的文件。

例如:假设我将程序 Prog 保存在目录“C:\ProgDir\”中。我将“\ProgDir”提交到共享文件夹。在 ProgDir 内部是另一个包含我想导入 Prog 的文件的目录(例如“\ProgDir\TestDir\TestFile.txt”)目录已更改;

(例如,在我的电脑上,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);除非您实际上有一个使用属性调用的类,否则应该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");

于 2012-05-16T17:44:45.507 回答
3

FileInfo 构造函数采用字符串类型的单个参数。尝试在 TestFile.txt 周围加上引号。

改变

FileInfo file = new FileInfo(TestFile.txt);

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

除非 TestFile 是一个具有txt字符串类型属性的对象,在这种情况下,您必须在尝试使用它之前创建该对象。

于 2012-05-16T17:42:44.720 回答
1

我有一个类似的问题并通过使用此方法解决了它:

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

如果您需要更相对的文件路径来处理不同的环境,这可能是一个不错的选择。

于 2020-10-02T20:02:00.437 回答
0

最简单的方法是只使用文件名(不是完整路径)和“TestDir”,并给 StreamReader 一个相对路径。

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

您可以使用 path.combine 获取当前目录来构建,然后组合您需要的文件路径

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