在C#控制台应用程序中更正文件路径

时间:2013-04-06 13:29:10

标签: c#-4.0 console-application relative-path filepath

有人可以告诉我如何获取文件data.xml的正确文件路径吗?这是文件所在的位置:

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并获取文件。但由于这是一个控制台应用程序,我不知道。

相关说明,Console应用程序和Executable应用程序之间有什么区别?我是否正确,没有区别,因为如果控制台应用程序有Main方法,它可以是可执行应用程序吗?

由于

3 个答案:

答案 0 :(得分:19)

您还可以将data.xml添加到输出构建目录中。您需要右键点击该文件,然后为Copy if newer选择Copy alwaysCopy 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可以是不同的应用程序类型,例如console或wpf或winforms(这就是visual studio对它们进行分组的方式)。

答案 1 :(得分:11)

获取当前工作目录:

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

重要提示:App_Data必须与您的应用程序位于同一目录中。

获取data.xml文件的最佳方法是随身携带应用程序或保存文件,例如在用户的“home”目录中(或在Windows 8下调用的任何目录)。

答案 2 :(得分:0)

您可以嵌入文件并使用反射来获取它。

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