C# абсолютный путь с streamReader
У меня проблема с чтением файла в C# У меня есть два разных места для.exe (оба разные) и чтения одного и того же XML-файла. Поэтому, когда я даю путь так:
TextReader textReader = new StreamReader(@"../../../TrajectoryGen/obstacleList.xml");
он может читать из одного места (которое находится на 3 папки позади, как используется в пути), но не из другого места (которое находится только на 2 папки позади). Как я могу решить эту проблему, чтобы она работала из обеих папок?
1 ответ
Во-первых, это зависит от того, знаете ли вы одно из имен родительской папки.
const string FILENAME = "obstacleList.xml";
const string FOLDER = "TrajectoryGen";
string path = Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().Location);
do
{
path = Path.GetDirectoryName(path);
} while (!Path.GetFileName(path).Equals(FOLDER, StringComparison.OrdinalIgnoreCase));
string filepath = String.Format("{0}{1}{2}", path, Path.DirectorySeparatorChar, FILENAME);
^^ Вы также можете использовать частичный путь в FILENAME, как в приведенном ниже примере, если вам нужно войти в каталог, как только вы окажетесь в "базовой" папке, имя которой вы знаете.
Второй путь вслепую продолжается по каталогам
const string FILENAME = @"TrajectoryGen\obstacleList.xml";
string path = Path.GetFullPath(System.Reflection.Assembly.GetExecutingAssembly().Location);
string filepath;
do
{
path = Path.GetDirectoryName(path);
//pump
filepath = String.Format("{0}{1}{2}", path, Path.DirectorySeparatorChar, FILENAME);
} while (!File.Exists(filepath));
Оба требуют "использование System.IO;" и оба не реализовали обработку ошибок и выдают исключение NullReferenceException, если файл / папка не найден.
Я специально использовал цикл do-while, потому что определение пути будет включать имя исполняемого файла.