Βλέπω ότι υπάρχουν κάποιοι τρόποι για να λάβετε τη διαδρομή του φακέλου της εφαρμογής:
Application.StartupPath
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
AppDomain.CurrentDomain.BaseDirectory
System.IO.Directory.GetCurrentDirectory()
Environment.CurrentDirectory
System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
System.IO.Path.GetDirectory(Application.ExecutablePath)
Ποιος είναι ο καλύτερος τρόπος ανάλογα με την περίπτωση;
Το AppDomain.CurrentDomain.BaseDirectory
είναι ίσως το πιο χρήσιμο για την πρόσβαση σε αρχεία των οποίων η θέση είναι σχετική με τον κατάλογο εγκατάστασης της εφαρμογής.
Σε μια εφαρμογή ASP.NET, αυτός θα είναι ο ριζικός κατάλογος της εφαρμογής και όχι ο υποφάκελος bin - που είναι μάλλον αυτό που συνήθως θέλετε. Σε μια εφαρμογή-πελάτη, θα είναι ο κατάλογος που περιέχει το κύριο εκτελέσιμο αρχείο.
Σε μια εφαρμογή VSTO 2005, θα είναι ο κατάλογος που περιέχει τις διαχειριζόμενες από το VSTO συναρμολογήσεις για την εφαρμογή σας, όχι, ας πούμε, η διαδρομή προς το εκτελέσιμο αρχείο του Excel.
Οι άλλοι μπορεί να επιστρέψουν διαφορετικούς καταλόγους ανάλογα με το περιβάλλον σας - για παράδειγμα, δείτε την απάντηση του @Vimvq1987's.
Το CodeBase
είναι το μέρος όπου βρέθηκε ένα αρχείο και μπορεί να είναι μια διεύθυνση URL που αρχίζει με http://. Σε αυτή την περίπτωση, η Location
θα είναι πιθανώς η κρυφή μνήμη λήψης της συναρμολόγησης. Το CodeBase δεν είναι εγγυημένο ότι έχει οριστεί για σύνολα στο GAC.
Σημειώστε ότι δεν επιστρέφουν όλες αυτές οι μέθοδοι την ίδια τιμή. Σε ορισμένες περιπτώσεις, μπορούν να επιστρέψουν την ίδια τιμή, αλλά προσέξτε, οι σκοποί τους είναι διαφορετικοί:
Application.StartupPath
επιστρέφει την παράμετρο StartupPath
(μπορεί να οριστεί κατά την εκτέλεση της εφαρμογής)
System.IO.Directory.GetCurrentDirectory()
επιστρέφει τον τρέχοντα κατάλογο, ο οποίος μπορεί να είναι ή να μην είναι ο φάκελος όπου βρίσκεται η εφαρμογή. Το ίδιο ισχύει και για την παράμετρο Environment.CurrentDirectory
. Σε περίπτωση που το χρησιμοποιείτε σε ένα αρχείο DLL, θα επιστρέψει τη διαδρομή όπου εκτελείται η διεργασία (αυτό ισχύει ιδιαίτερα στο ASP.NET).
Για μια εφαρμογή ιστού, για να λάβετε τον τρέχοντα ριζικό κατάλογο της εφαρμογής ιστού, καλέστε γενικά την ιστοσελίδα για την τρέχουσα εισερχόμενη αίτηση:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;