2013-04-06 218 views
13

有人能告诉我如何获取文件data.xml的正确文件路径吗?下面是该文件位于:C#控制台应用程序中的正确文件路径

enter image description here

这里是我的C#代码,该代码检查,看看是否存在该文件为提供的路径:

public class Parser 
{ 
    static void Main(string[] args) 
    { 
     Console.WriteLine(File.Exists("App_Data/data.xml")); 
     Console.Read(); 
    } 
} 

我不断收到假,意思是这样的文件不存在。因此,文件到目前为止,我已经试过路径包括:

"~/App_Data/data.xml" 
"/App_Data/data.xml" 
"App_Data/data.xml" 

如果这是一个Web应用程序,我就知道该怎么做,用的HttpContext,并在文件中获取。但由于这是一个控制台应用程序,我不知道。

与此相关的,就是一个控制台应用程序和可执行应用程序之间的区别?我的意思是没有区别,因为如果控制台应用程序具有Main方法,它可以是可执行应用程序?

感谢

回答

16

您还可以将data.xml添加到您的输出生成目录。您需要右键单击该文件,然后选择Copy if newerCopy always作为Copy to output directory option

然后你可以使用以下命令:

Console.WriteLine(File.Exists("App_Data/data.xml")); // Should print True 

但是,如果你希望data.xml中改变那么就指向的完整路径,地方项目外(假设的App_Data/data.xml中被复制到C:/ Temp)中,则:

Console.WriteLine(File.Exists("C:/Temp/App_Data/data.xml")); // Prints True 

而且,你涉及到控制台和一个可执行的应用等问题,EXE可以是不同的应用类型,如控制台或WPF或WinForms的(也就是这样的视觉工作室组这些)。

+0

我只是做了,并再次运行它,仍然有假:( – Ciwan 2013-04-06 13:46:31

+0

是生成操作设置为内容? – Leon 2013-04-06 13:49:46

+2

你有一个向上投票澄清可执行应用程序位。是的我已经将它设置为内容和复制始终。 – Ciwan 2013-04-06 13:50:19

9

获取当前工作目录:

Directory.GetCurrentDirectory() + "/App_Data/data.xml"; 

重要:App_Data必须在同一目录作为您的应用程序。

让你data.xml文件的最佳方式是与你的应用程序,或者例如保存随身携带它在用户的“home”目录中(或者在Windows 8下调用的任何东西)。

+0

我的Visual Studio 2012中的好,这是我按F5键来运行我的应用程序。因此,所有的项目文件将位于C:/用户/我/我的文档/ Visual Studio 2012 /项目/ XML解析器/ XML解析器..等你知道,项目进入VS的默认位置。 – Ciwan 2013-04-06 13:49:10

+0

据我所知,该应用程序已构建并放入build \ release目录或某处。打开一个命令行并浏览你的应用程序目录,并检查.exe和App_Data'目录所在的位置。 – akluth 2013-04-06 13:51:24

+0

这里是[App_Data文件夹是](https://imageshack.us/scaled/large/713/filepath.jpg)。 – Ciwan 2013-04-06 13:55:58

0

你可以embbed文件,并使用反射来得到它。

Steam s = Assembly.GetExecutingAssembly().GetManifestResourceStream("file name"); 
XmlDocument d = new XmlDocument(); 
steamReader r = new StreamReader(s); 
d.LoadXml(r.ReadToEnd()); 
r.Close(); 

查看该文章。它显示了如何嵌入并获得使用反射文件:http://support.microsoft.com/kb/319292