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

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

enter image description here

вот мой код 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"

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

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

спасибо

3 ответов


вы также можете добавить данные.XML в выходной каталог построения. Вам нужно будет щелкнуть правой кнопкой мыши по файлу и выбрать Copy if newer или Copy always на Copy to output directory option.

затем вы можете использовать следующее:

Console.WriteLine(File.Exists("App_Data/data.xml")); // Should print True

однако, если вы ожидаете данных.xml для изменения затем просто укажите полный путь, где-то вне вашего проекта (предполагая App_Data/data.xml копируется в C:/Temp) затем:

Console.WriteLine(File.Exists("C:/Temp/App_Data/data.xml")); // Prints True

кроме того, для вашего другого вопроса, связанного с консолью и исполняемым файлом приложение, exe может быть другим типом приложения, таким как консоль или wpf или winforms (так visual studio группирует их).


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

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

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

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


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

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

проверьте эту статью. Он показывает, как вставлять и получать файл с помощью reflection:http://support.microsoft.com/kb/319292