Streamreader для относительный путь

мне было интересно, может ли кто-нибудь сказать мне, как указать StreamReader на файл внутри текущего рабочего каталога программы.

E. G. скажем, у меня есть программа Prog, сохраненная в каталоге C:ProgDir - ... Я фиксирую ProgDir в общую папку. Внутри ProgDir есть еще один каталог, содержащий файлы, которые я хотел бы импортировать в Prog (например, ProgDirTestDirTestFile.txt) я хотел бы сделать так, чтобы StreamReader мог читать эти тестовые файлы, даже если путь к каталогу имеет изменился;

(Е. Г., На моем компьютере, путь к Testfiles составляет

C:ProgDirTestDirTestFile.txt

но на компьютере другого человека каталог

C:dev_codeProgDirTestDirTestFile.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 ответов


папка "TestDir" всегда находится в исполняемом каталоге? если да, попробуйте это

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

    string file = dir + @"\TestDir\TestFile.txt";

Это даст вам путь exe плюс папку внутри него и textfile


можно использовать 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 метод, они уже используют относительные пути. Таким образом, вы должны иметь возможность использовать stream reader только на относительном путь.

дайте эти несколько вещей попробовать и дайте нам знать.

Edit: вот что вы должны попробовать:

FileInfo file = new FileInfo("TestFile.txt");
StreamReader sr = new StreamReader(fullFile.FullName);
//OR
StreamReader sr = new StreamReader("TestFile.txt");

однако я заметил, что тестовый файл находится в TestDir. Если исполняемый файл находится в ProgDir как вы заявляете, тогда это все равно потерпит неудачу, потому что ваш относительный путь неправильный.

попробуйте изменить его . Т. е.: StreamReader sr = new StreamReader("TestDir\TestFile.txt");


на FileInfo на конструктор принимает один параметр типа String. Попробуйте поставить кавычки вокруг TestFile.формат txt.

изменить

FileInfo file = new FileInfo(TestFile.txt);

to

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

Если TestFile не является объектом со свойством txt типа string, в этом случае вам нужно создать объект, прежде чем пытаться его использовать.