流读取器到相对文件路径
本文关键字:文件 路径 相对 读取 | 更新日期: 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)