Правильный путь к файлу в консольном приложении C#
может кто-то пожалуйста, скажите мне, как я могу получить правильный путь к файлу данных.в 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"
Если бы это было веб-приложение, я бы знал, что делать, используя 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