2013-02-10 75 views
0

我在我的项目文件夹外有一个XML文件,我想从我的代码中访问它,以便在任何机器上执行代码,我会把路径放在相对于该项目的目录。硬编码C中的相对路径#

比方说作为我的当前目录是在文件夹A的例子,我想访问该文件夹B中旁边A.

+3

http://stackoverflow.com/questions/6041332/best-way-to-get-application-folder-path – kenny 2013-02-10 11:10:10

+1

该项目的目录(如'.csproj'文件的目录)将无关紧要目标机器,但可执行文件的目录('.exe'文件)可能是。 *是可执行文件和Xml文件之间的相对路径? – 2013-02-10 11:10:41

+0

你对这个文件的位置有任何控制吗?如果它是从其他应用程序或用户操作生成的,则总是有可能发生某些变化。为什么不使用配置文件并阅读那里的确切位置? – Steve 2013-02-10 12:21:45

回答

4

如果XML文件始终是你的应​​用程序文件夹,您可以使用内。

Environment.CurrentDirectory

工作路径不一定是其中的可执行文件的位置。为确保您可以使用从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

+0

可以说我当前的目录在文件夹A中,而文件在A..how旁边的文件夹B中,这可以解决它吗? – 2013-02-10 11:17:34

+0

请让我知道,如果这是你在找什么。 :) – eandersson 2013-02-10 11:31:45

+1

是的,它实际上工作......谢谢你大的时间;) – 2013-02-10 11:34:23