C# 4.0 C控制台应用程序中的正确文件路径

C# 4.0 C控制台应用程序中的正确文件路径,c#-4.0,console-application,relative-path,filepath,C# 4.0,Console Application,Relative Path,Filepath,有人能告诉我如何为data.xml文件找到正确的文件路径吗?下面是文件所在的位置: 下面是我的C代码,它正在检查所提供路径的文件是否存在: public class Parser { static void Main(string[] args) { Console.WriteLine(File.Exists("App_Data/data.xml")); Console.Read(); } } 我不断得到假,这意味着这样的文件不存在。到目

有人能告诉我如何为data.xml文件找到正确的文件路径吗?下面是文件所在的位置:

下面是我的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方法,那么它可以是一个可执行的应用程序,那么这两者之间没有区别,对吗


谢谢

获取当前工作目录:

Directory.GetCurrentDirectory() + "/App_Data/data.xml";
重要提示:应用程序_数据必须与应用程序位于同一目录中


获取data.xml文件的最佳方法是将其与应用程序一起携带或保存,例如保存在用户的主目录或Windows 8下的任何名称中。

您也可以将data.xml添加到输出生成目录中。您需要右键单击该文件,然后选择“复制(如果较新)”或“复制到输出目录”选项的“复制始终”

然后,您可以使用以下选项:

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,这是visual studio对这些文件进行分组的方式。

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

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

看看这篇文章。它展示了如何使用反射嵌入和获取文件:

我刚刚嵌入并再次运行了它,但仍然得到了一个错误:构建操作是否设置为内容?您获得了澄清可执行应用程序位的赞成票。是的,我已将其设置为“内容并始终复制”。请尝试从Visual Studio菜单重建项目。我刚刚运行了代码,它在调试和发布模式下为我工作。如果导航到项目路径并查看bin/Debug folderWell,您应该会看到一个带有Data.xml的App_数据目录。如果您希望data.xml是该文件,那么我的答案不是您想要的。以我建议的方式添加该文件或任何资源将嵌入到exe中。最好将此文件放在项目之外的某个位置,并引用文件的完整路径,而不是在Visual Studio 2012中,在那里我按F5按钮运行我的应用程序。因此,所有项目文件都将位于C:/Users/Me/My Documents/Visual Studio 2012/Projects/XML Parser/XML Parser中。。等等,你知道,默认的项目所在地,而据我所知,应用程序是构建并放入build\release目录或其他目录的。;打开命令行,在应用程序目录中导航,检查.exe和App_数据目录的位置。这里是。将文件从bin复制到XML解析器,或将App_数据目录复制到bin并运行它。如果我们将其与@Leon的答案结合起来,这确实是一个很好的答案。其中Leon提到要更改App_数据文件夹中文件的“复制到输出目录”属性