2013-04-06 13 views
13

Qualcuno può dirmi come posso ottenere il percorso file corretto per il file data.xml? Qui è dove il file si trova:Percorso file corretto all'interno dell'applicazione console C#

enter image description here

Qui è il mio codice C# che sta controllando per vedere se il file esiste per il percorso in dotazione:

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

continuo a ricevere falso, il che significa un tale il file non esiste. Così percorsi del file che ho provato finora includono:

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

Se questo fosse un applicazione Web, vorrei sapere cosa fare, utilizzando il HttpContext e ottenere il file. Ma dal momento che questa è un'applicazione Console, non lo so.

Su una nota correlata, qual è la differenza tra un'applicazione Console e un'applicazione eseguibile? Ho corretto che non c'è differenza, dal momento che un'app Console può essere un'app eseguibile se ha un metodo Main?

Grazie

risposta

16

È inoltre possibile aggiungere data.xml alla directory di generazione di output. Sarà necessario fare clic destro sul file e selezionare Copy if newer o Copy always per il Copy to output directory option.

quindi è possibile utilizzare il seguente:

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

Tuttavia, se ci si aspetta data.xml per cambiare poi basta puntare al percorso completo, da qualche parte al di fuori del progetto (supponendo App_Data/data.xml viene copiato C:/Temp), allora:

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

Inoltre, per la tua altra domanda relativa a una console e un programma eseguibile, il file EXE può essere un diverso tipo di applicazione come ad esempio console o WPF o WinForms (questo è il modo visual Studio raggruppa questi).

+0

L'ho appena fatto, e l'ho eseguito di nuovo, e ancora ottenuto un falso :( – Ciwan

+0

L'azione di generazione è impostata su Contenuto? – Leon

+2

Hai ottenuto un voto per chiarire il bit dell'applicazione eseguibile. Sì, lo ho impostato su Contenuto e Copia sempre. – Ciwan

9

Prendi la directory di lavoro corrente:

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

Importante: App_Data deve essere nella stessa directory come l'applicazione è.

Il modo migliore per ottenere il tuo file data.xml è di portarlo con la tua applicazione o di salvarlo, ad es. nella directory "home" dell'utente (o come viene chiamato in Windows 8).

+0

Bene Sono all'interno di Visual Studio 2012, ed è qui che premo il pulsante F5 per eseguire la mia app. Quindi tutti i file di progetto si troveranno in C:/Users/Me/Documenti/Visual Studio 2012/Progetti/XML Parser/XML Parser .. ecc. Sai, il luogo predefinito in cui i progetti vanno in VS. – Ciwan

+0

Per quanto ne so, l'applicazione è compilata e inserita nella directory build \ release o sth .; apri una linea di comando e naviga nella directory dell'applicazione e controlla dove si trova l'exe e dove si trova la directory 'App_Data'. – akluth

+0

Qui è dove si trova la [cartella App_Data] (https://imageshack.us/scaled/large/713/filepath.jpg). – Ciwan

0

È possibile inserire il file e utilizzare la riflessione per ottenerlo.

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

Controllare questo articolo. Mostra come incorporare e ottenere un file utilizzando la reflection: http://support.microsoft.com/kb/319292