2013-04-06 15 views
13

Czy ktoś może mi powiedzieć, w jaki sposób mogę uzyskać poprawną ścieżkę do pliku data.xml? Oto gdzie plik siedzi:Prawidłowa ścieżka pliku wewnątrz aplikacji konsoli C#

enter image description here

Oto mój C# kod, który sprawdza, czy istnieje plik za pomocą dostarczonego ścieżce:

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

Wciąż dostaję False, czyli taki plik nie istnieje. Więc plik ścieżki próbowałem do tej pory to:

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

Jeśli to aplikacja internetowa, chciałbym wiedzieć, co zrobić, używając HttpContext i uzyskiwanie w pliku. Ale ponieważ jest to aplikacja konsoli, nie wiem.

W powiązanej notatce, jaka jest różnica między aplikacją konsoli a aplikacją wykonywalną? Czy mam rację, że nie ma różnicy, ponieważ aplikacja konsolowa może być aplikacją wykonywalną, jeśli ma metodę główną?

Dzięki

Odpowiedz

16

Można również dodać plik data.xml do katalogu budowania wyjścia. Będziesz musiał kliknąć plik prawym przyciskiem myszy i wybrać Copy if newer lub Copy always dla Copy to output directory option.

Następnie można użyć następujące:

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

Jeśli jednak oczekiwać data.xml zmienić potem po prostu wskazać pełną ścieżkę, gdzieś poza projektem (zakładając App_Data/data.xml jest kopiowany do C:/Temp), a następnie:

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

również dla innej kwestii związanej z konsoli i aplikacji wykonywalnego exe może być inny typ aplikacji, takich jak konsola lub WPF lub WinForm (to jest sposób visual studio grupuje je).

+0

Po prostu zrobiłem, i uruchomiłem to jeszcze raz i nadal mam Fałsz :( – Ciwan

+0

Czy akcja kompilacji jest ustawiona na zawartość? – Leon

+2

Masz głos w górę dla wyjaśnienia bitu aplikacji wykonywalnych Tak, mam to ustawione na zawartość i kopiowanie zawsze. – Ciwan

9

Pobierz aktualny katalog roboczy:

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

Ważne: App_Data musi być w tym samym katalogu co aplikacja jest.

Najlepszym sposobem na uzyskanie pliku data.xml jest przeniesienie go za pomocą aplikacji lub zapisanie np. w katalogu "domowym" twojego użytkownika (lub jakkolwiek się nazywa pod Windows 8).

+0

Cóż, jestem w Visual Studio 2012, i to jest, gdzie naciśnij przycisk F5, aby uruchomić moją aplikację. Tak więc wszystkie pliki projektu będą znajdować się w C:/Users/Me/My Documents/Visual Studio 2012/Projects/XML Parser/XML Parser ... itd. Domyślne miejsce, w którym projekty przechodzą w VS. – Ciwan

+0

O ile mi wiadomo, aplikacja jest budowana i umieszczana w katalogu build \ release lub coś; otwórz wiersz poleceń i przejdź do katalogu aplikacji i sprawdź, gdzie znajduje się .exe i gdzie znajduje się katalog 'App_Data'. – akluth

+0

Tutaj znajduje się folder [App_Data] (https://imageshack.us/scaled/large/713/filepath.jpg). – Ciwan

0

Możesz pobrać plik i użyć odbicia, aby go pobrać.

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

Sprawdź ten artykuł. Pokazuje, jak osadzić i pobrać plik za pomocą refleksji: http://support.microsoft.com/kb/319292