我在我的项目文件夹外有一个XML文件,我想从我的代码中访问它,以便在任何机器上执行代码,我会把路径放在相对于该项目的目录。硬编码C中的相对路径#
比方说作为我的当前目录是在文件夹A的例子,我想访问该文件夹B中旁边A.
我在我的项目文件夹外有一个XML文件,我想从我的代码中访问它,以便在任何机器上执行代码,我会把路径放在相对于该项目的目录。硬编码C中的相对路径#
比方说作为我的当前目录是在文件夹A的例子,我想访问该文件夹B中旁边A.
如果XML文件始终是你的应用程序文件夹,您可以使用内。
工作路径不一定是其中的可执行文件的位置。为确保您可以使用从MSDN获取的以下代码。
string path;
path = System.IO.Path.GetDirectoryName(
System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
否则,如果它是Microsoft特殊文件夹的一部分,例如.e.g MyDocuments,则可以使用。
Environment.SpecialFolder.MyDocuments
你会使用这样的。
Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments),
"myfile.xml")
输出将是当前用户My Documents文件夹中myfile.xml的路径。在我的情况下,它会给我C:\Users\eandersson\Documents\myfile.xml
。
Path.Combine在这里非常有帮助,因为它可以让我们将多个磁盘路径合并为一个。
编辑:需要评论的其他信息。
我认为最好的方法是使用Directory.GetParent。
Directory.GetParent(Environment.CurrentDirectory).FullName
并做这样的事情。
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
。
可以说我当前的目录在文件夹A中,而文件在A..how旁边的文件夹B中,这可以解决它吗? – 2013-02-10 11:17:34
请让我知道,如果这是你在找什么。 :) – eandersson 2013-02-10 11:31:45
是的,它实际上工作......谢谢你大的时间;) – 2013-02-10 11:34:23
http://stackoverflow.com/questions/6041332/best-way-to-get-application-folder-path – kenny 2013-02-10 11:10:10
该项目的目录(如'.csproj'文件的目录)将无关紧要目标机器,但可执行文件的目录('.exe'文件)可能是。 *是可执行文件和Xml文件之间的相对路径? – 2013-02-10 11:10:41
你对这个文件的位置有任何控制吗?如果它是从其他应用程序或用户操作生成的,则总是有可能发生某些变化。为什么不使用配置文件并阅读那里的确切位置? – Steve 2013-02-10 12:21:45