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, в этом случае вам нужно создать объект, прежде чем пытаться его использовать.