1

我在 C# 中读取文件时遇到问题我有两个不同的 .exe 位置(两者都不同)并读取相同的 .xml 文件。所以当我给出这样的路径时:

TextReader textReader = new StreamReader(@"../../../TrajectoryGen/obstacleList.xml");

它能够从一个位置(路径中使用的后面的 3 个文件夹)读取,但不能从另一个位置(后面只有 2 个文件夹)读取如何解决这个问题,以便它可以从两个文件夹中工作?

4

1 回答 1

0

第一种方式,这取决于您知道其中一个父文件夹的名称。

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 循环,因为路径的定义将包含可执行文件名称。

于 2013-02-15T21:56:03.350 回答