Streamreader到相对文件路径

gfp*_*ste 10 .net c# filestream

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

EG说我有程序Prog,保存在目录C:\ ProgDir中.我将\ ProgDir提交到共享文件夹.里面的ProgDir是另一个包含我要导入Prog的文件的目录(例如\ ProgDir\TestDir\TestFile.txt)我想这样做,以便StreamReader可以读取那些TestFiles,即使目录的路径有改变;

(EG,在我的电脑上,Testfiles的路径是

C:\ ProgDir\TESTDIR\TESTFILE.TXT

但是在另一个人的计算机上,目录是

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

).

如何从另一个人的计算机上的TestFile.txt中读取StreamReader?(澄清一下,文件名不会改变,唯一的变化就是路径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);
Run Code Online (Sandbox Code Playgroud)

(从中获取:获取相对于当前工作目录的路径?)

但我得到"当前上下文中不存在TestFile".任何人都知道如何处理这个问题?

谢谢.

hjg*_*aca 13

文件夹"TestDir"是否始终位于可执行文件目录中?如果是这样,试试这个

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

    string file = dir + @"\TestDir\TestFile.txt";
Run Code Online (Sandbox Code Playgroud)

这将为您提供exe的路径以及其中的文件夹和文本文件

  • 虽然正确,但还有一种更简单的方法。当前目录始终是“.” - 所以只需使用“.\TestDir\TestFile.txt”(参见我的答案) (2认同)

Raj*_*ajN 10

您可以使用该GetFullPath()方法.试试这个:

 string filePath = System.IO.Path.GetFullPath("TestFile.txt");
 StreamReader sr = new StreamReader(filePath);
Run Code Online (Sandbox Code Playgroud)


SPF*_*ake 5

一些东西:

首先,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");
Run Code Online (Sandbox Code Playgroud)

但是,我注意到的一件事是TestFile位于中TestDir。如果您的可执行文件位于ProgDir您指定的位置,则此操作仍然会失败,因为您的相对路径不正确。

尝试将其更改为TestDir\TestFile.txt。IE浏览器:StreamReader sr = new StreamReader("TestDir\TestFile.txt");