C# C语言中相对路径的硬编码#

C# C语言中相对路径的硬编码#,c#,C#,我在我的项目文件夹外有一个XML文件,我想从我的代码中访问它,以便代码能够在我将放置相对于项目目录的路径的任何机器上执行 例如,我的当前目录位于文件夹A中,而我要访问的文件位于文件夹A旁边的文件夹B中。如果XML文件始终位于您可以使用的应用程序文件夹中 工作路径不一定是可执行文件所在的位置。为了确保您可以使用以下源代码 否则,如果它是Microsoft特殊文件夹的一部分,例如您可以使用的MyDocuments 你会像这样使用它 Path.Combine(Environment.GetFold

我在我的项目文件夹外有一个XML文件,我想从我的代码中访问它,以便代码能够在我将放置相对于项目目录的路径的任何机器上执行


例如,我的当前目录位于文件夹A中,而我要访问的文件位于文件夹A旁边的文件夹B中。

如果XML文件始终位于您可以使用的应用程序文件夹中

工作路径不一定是可执行文件所在的位置。为了确保您可以使用以下源代码

否则,如果它是Microsoft特殊文件夹的一部分,例如您可以使用的MyDocuments

你会像这样使用它

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                           "myfile.xml")
Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "PathB", "myfile.xml")
输出将是当前用户“我的文档”文件夹中myfile.xml的路径。在我的例子中,它会给我
C:\Users\eandersson\Documents\myfile.xml

在这里非常有用,因为它将允许我们将多个磁盘路径合并到一个磁盘路径中

编辑:评论请求的附加信息

我认为最好的方法是使用

然后像这样做

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                           "myfile.xml")
Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "PathB", "myfile.xml")
这将在与项目文件夹相同的位置查找PathB

C:\MyProjects\PathA\MyExecutable.exe
C:\MyProjects\PathB\myfile.xml

假设您正在该位置运行MyExecutable.exe。如果xml文件始终位于您可以使用的应用程序文件夹中,则上述代码应自动返回PathB中包含文件
myfile.xml

的第二个位置

工作路径不一定是可执行文件所在的位置。为了确保您可以使用以下源代码

否则,如果它是Microsoft特殊文件夹的一部分,例如您可以使用的MyDocuments

你会像这样使用它

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                           "myfile.xml")
Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "PathB", "myfile.xml")
输出将是当前用户“我的文档”文件夹中myfile.xml的路径。在我的例子中,它会给我
C:\Users\eandersson\Documents\myfile.xml

在这里非常有用,因为它将允许我们将多个磁盘路径合并到一个磁盘路径中

编辑:评论请求的附加信息

我认为最好的方法是使用

然后像这样做

Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
                                           "myfile.xml")
Path.Combine(Directory.GetParent(Environment.CurrentDirectory).FullName, "PathB", "myfile.xml")
这将在与项目文件夹相同的位置查找PathB

C:\MyProjects\PathA\MyExecutable.exe
C:\MyProjects\PathB\myfile.xml

假设您正在该位置运行MyExecutable.exe。上面的代码应该自动返回PathB中带有文件
myfile.xml

的第二个位置。项目目录(如
.csproj
文件的目录)在目标计算机上不相关,但可执行文件的目录(
.exe
文件)可能不相关。可执行文件和Xml文件之间的相对路径是什么?您是否可以控制此文件的位置?如果它是由其他应用程序或用户操作生成的,则总是有可能发生某些更改。为什么不使用配置文件并读取其中的确切位置呢?项目的目录(如中所示,
.csproj
文件的目录)在目标计算机上不相关,但可执行文件的目录(
.exe
文件)可能不相关。可执行文件和Xml文件之间的相对路径是什么?您是否可以控制此文件的位置?如果它是由其他应用程序或用户操作生成的,则总是有可能发生某些更改。为什么不使用配置文件并读取其中的确切位置?假设我的当前目录位于文件夹a中,而该文件位于文件夹a旁边的B中。这如何解决?请告诉我这是否是您要查找的内容。:)“如果XML文件始终位于应用程序文件夹内,则可以使用。
Environment.CurrentDirectory
”-错误。当前工作目录不必与存储应用程序的目录相同。我更新了answer@O.R.Mapper,虽然这可能是一个陷阱,但只有在特殊情况下,可执行目录和工作目录才会不同。假设我的当前目录在文件夹a中,该文件位于A旁边的文件夹B中。这如何解决它?请告诉我您是否正在寻找该文件。:)“如果XML文件始终位于应用程序文件夹内,则可以使用。
Environment.CurrentDirectory
”-错误。当前工作目录不必与存储应用程序的目录相同。我更新了answer@O.R.Mapper,虽然这可能是一个陷阱,但只有在特殊情况下,可执行目录和工作目录才会不同。