我在 C# 中读取文件时遇到问题我有两个不同的 .exe 位置(两者都不同)并读取相同的 .xml 文件。所以当我给出这样的路径时:
TextReader textReader = new StreamReader(@"../../../TrajectoryGen/obstacleList.xml");
它能够从一个位置(路径中使用的后面的 3 个文件夹)读取,但不能从另一个位置(后面只有 2 个文件夹)读取如何解决这个问题,以便它可以从两个文件夹中工作?
我在 C# 中读取文件时遇到问题我有两个不同的 .exe 位置(两者都不同)并读取相同的 .xml 文件。所以当我给出这样的路径时:
TextReader textReader = new StreamReader(@"../../../TrajectoryGen/obstacleList.xml");
它能够从一个位置(路径中使用的后面的 3 个文件夹)读取,但不能从另一个位置(后面只有 2 个文件夹)读取如何解决这个问题,以便它可以从两个文件夹中工作?
第一种方式,这取决于您知道其中一个父文件夹的名称。
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 循环,因为路径的定义将包含可执行文件名称。