20

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

在此处输入图像描述

这是我的 C# 代码,它正在检查文件是否存在于提供的路径中:

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

我不断得到 False,这意味着这样的文件不存在。所以到目前为止我尝试过的文件路径包括:

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

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

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

谢谢

4

3 回答 3

25

您还可以将 data.xml 添加到输出构建目录。您需要右键单击该文件并选择Copy if newerCopy 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 可以是不同的应用程序类型,例如控制台或 wpf 或 winforms(这就是 Visual Studio 对这些应用程序进行分组的方式)。

于 2013-04-06T13:43:57.600 回答
16

获取当前工作目录:

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

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

获取data.xml文件的最佳方式是将其与应用程序一起携带或保存在用户的“主”目录中(或在 Windows 8 下调用的任何目录)。

于 2013-04-06T13:33:56.493 回答
0

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

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

看看这篇文章。它展示了如何使用反射嵌入和获取文件:https ://docs.microsoft.com/en-us/dotnet/api/system.reflection.assembly.getmanifestresourcestream?view=netframework-4.8

于 2013-04-06T14:01:43.863 回答