Правильный путь к файлу в приложении консоли С#

Может кто-нибудь, пожалуйста, скажите мне, как я могу получить правильный путь к файлу файла data.xml? Вот где находится файл:

enter image description here

Вот мой код на С#, который проверяет, существует ли файл для поставляемого пути:

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"

Если это было веб-приложение, я бы знал, что делать, используя HttpContext и получая файл. Но поскольку это консольное приложение, я не знаю.

В зависимости от того, какая разница между консольным приложением и исполняемым приложением? Правильно ли я понимаю, что нет никакой разницы, поскольку приложение консоли может быть исполняемым приложением, если оно имеет метод Main?

благодаря

Ответ 1

Вы также можете добавить data.xml в свой каталог сборки вывода. Вам нужно будет щелкнуть правой кнопкой мыши по файлу и выбрать " Copy if newer или " Copy 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 (что создает визуальную студию).

Ответ 2

Получить текущий рабочий каталог:

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

Важно: App_Data должен находиться в том же каталоге, что и ваше приложение.

Лучший способ получить файл data.xml - переносить его с вашим приложением или сохранять его, например, в "домашнем" каталоге вашего пользователя (или как он называется в Windows 8).

Ответ 3

Вы могли бы использовать файл и использовать отражение, чтобы получить его.

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