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

J86*_*J86 16 relative-path console-application filepath c#-4.0

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

在此输入图像描述

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

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

我一直变弱,意味着这样的文件不存在.所以到目前为止我尝试过的文件路径包括:

"~/App_Data/data.xml"
"/App_Data/data.xml"
"App_Data/data.xml"
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Leo*_*eon 20

您还可以将data.xml添加到输出构建目录中.您需要右键单击文件,并选择Copy if newerCopy alwaysCopy to output directory option.

然后你可以使用以下内容:

Console.WriteLine(File.Exists("App_Data/data.xml")); // Should print True
Run Code Online (Sandbox Code Playgroud)

但是,如果您希望更改data.xml,那么只需指向项目外部的完整路径(假设App_Data/data.xml被复制到C:/ Temp),然后:

Console.WriteLine(File.Exists("C:/Temp/App_Data/data.xml")); // Prints True
Run Code Online (Sandbox Code Playgroud)

此外,对于与控制台和可执行应用程序相关的其他问题,exe可以是不同的应用程序类型,例如console或wpf或winforms(这是visual studio对这些应用程序进行分组的方式).

  • 你得到了一个澄清可执行应用程序位的投票.是的,我把它设置为Content and Copy Always. (2认同)

ale*_*oze 12

获取当前工作目录:

Directory.GetCurrentDirectory() + "/App_Data/data.xml";
Run Code Online (Sandbox Code Playgroud)

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

获取data.xml文件的最佳方法是将其与您的应用程序一起携带,或者将其保存在用户的"home"目录中(或者在Windows 8下调用它).