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的路径以及其中的文件夹和文本文件
Raj*_*ajN 10
您可以使用该GetFullPath()方法.试试这个:
string filePath = System.IO.Path.GetFullPath("TestFile.txt");
StreamReader sr = new StreamReader(filePath);
Run Code Online (Sandbox Code Playgroud)
一些东西:
首先,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");
Run Code Online (Sandbox Code Playgroud)
但是,我注意到的一件事是TestFile位于中TestDir。如果您的可执行文件位于ProgDir您指定的位置,则此操作仍然会失败,因为您的相对路径不正确。
尝试将其更改为TestDir\TestFile.txt。IE浏览器:StreamReader sr = new StreamReader("TestDir\TestFile.txt");