带streamReader的C#绝对路径

带streamReader的C#绝对路径,c#,relative-path,streamreader,filereader,absolute-path,C#,Relative Path,Streamreader,Filereader,Absolute Path,我在用C语言读取文件时遇到了一个问题# 我有两个不同的.exe位置(都不同)和读取相同的.xml文件。所以当我给出这样的路径时: TextReader textReader = new StreamReader(@"../../../TrajectoryGen/obstacleList.xml"); 它可以从一个位置(路径中使用的位置落后3个文件夹)读取,但不能从另一个位置(仅落后2个文件夹)读取 如何解决此问题,使其在两个文件夹中都能正常工作?首先,这取决于您是否知道父文件夹的名称之一 co

我在用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);
^^您还可以在文件名中使用部分路径,如下面的示例所示,以防在您知道其名称的“基本”文件夹中需要插入目录

第二条路盲目地继续向上走

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));
两者都需要“using System.IO;”,并且都没有实现错误处理,如果找不到文件/文件夹,将抛出NullReferenceException


我特意使用do while循环,因为路径的定义将包括可执行文件名。

@../../../../../TrajectoryGen/obstacleList.xml“
”,另一个是
@../../TrajectoryGen/obstacleList.xml“
?这就是“你如何解决这个问题”——或者你有不同的问题吗?老兄,这是同一个问题,但不是那么容易。有两个不同的GUI从不同的文件夹访问完全相同的代码。所以我不能为两个GUI定义不同的路径对象,因为它们使用的是同一个路径对象。我们必须看到你的整个项目,这可能是一个太大的问题。您可能想考虑打开一个问题,询问如何组织您的代码,以便您可以访问动态放置的文件,或某事。是的。但问题是,我无法重新构造代码,因为它是一个大型项目的一部分。因此,我想知道是否可以使用某种对路径的解决方案引用来修复它?您必须使用某种代码,可以读取文件夹名称并在层次结构中遍历,或者使用具有绝对路径的配置文件,或者将所需的文件放入文件夹中。尽管如此,这还是建筑方面的东西——并不是真正意义上的建筑。