流读取器到相对文件路径

本文关键字:文件 路径 相对 读取 | 更新日期: 2023-09-27 18:34:27

我想知道,是否有人可以告诉我如何将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);
(从中提取

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

但是我得到"当前上下文中不存在测试文件"。有人知道我应该如何处理这个问题吗?

谢谢。

流读取器到相对文件路径

文件夹"TestDir"是否总是在可执行文件目录中?如果是这样,请尝试此操作

    string dir =System.IO.Path.GetDirectoryName(
      System.Reflection.Assembly.GetExecutingAssembly().Location);
    string file = dir + @"'TestDir'TestFile.txt";

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

您可以使用

GetFullPath()方法。试试这个:

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

几件事:

首先,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");

但是,我注意到的一件事是测试文件位于 TestDir .如果您的可执行文件如您所声明的那样位于ProgDir中,那么这仍然会失败,因为您的相对路径不正确。

请尝试将其更改为TestDir'TestFile.txt。IE:StreamReader sr = new StreamReader("TestDir'TestFile.txt");

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

改变

FileInfo file = new FileInfo(TestFile.txt);

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

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

最简单的方法是只使用文件名(而不是完整路径(和"TestDir",并为 StreamReader 提供一个相对路径。

var relativePath = Path.Combine(".","TestDir",fileName);
using (var sr = new StreamReader(relativePath))
{
   //...
}

我遇到了类似的问题,并使用此方法解决了它:

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

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

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

 new StreamReader(Path.Combine(Environment.CurrentDirectory, "storage"));
System.IO.Path.GetDirectoryName(new System.Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath)