Καλύτερος τρόπος για να λάβετε τη διαδρομή φακέλου εφαρμογής

Βλέπω ότι υπάρχουν κάποιοι τρόποι για να λάβετε τη διαδρομή του φακέλου της εφαρμογής:

  1. Application.StartupPath
  2. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().Location)
  3. AppDomain.CurrentDomain.BaseDirectory
  4. System.IO.Directory.GetCurrentDirectory()
  5. Environment.CurrentDirectory
  6. System.IO.Path.GetDirectoryName( System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
  7. System.IO.Path.GetDirectory(Application.ExecutablePath)

Ποιος είναι ο καλύτερος τρόπος ανάλογα με την περίπτωση;

Λύση

Το AppDomain.CurrentDomain.BaseDirectory είναι ίσως το πιο χρήσιμο για την πρόσβαση σε αρχεία των οποίων η θέση είναι σχετική με τον κατάλογο εγκατάστασης της εφαρμογής.

Σε μια εφαρμογή ASP.NET, αυτός θα είναι ο ριζικός κατάλογος της εφαρμογής και όχι ο υποφάκελος bin - που είναι μάλλον αυτό που συνήθως θέλετε. Σε μια εφαρμογή-πελάτη, θα είναι ο κατάλογος που περιέχει το κύριο εκτελέσιμο αρχείο.

Σε μια εφαρμογή VSTO 2005, θα είναι ο κατάλογος που περιέχει τις διαχειριζόμενες από το VSTO συναρμολογήσεις για την εφαρμογή σας, όχι, ας πούμε, η διαδρομή προς το εκτελέσιμο αρχείο του Excel.

Οι άλλοι μπορεί να επιστρέψουν διαφορετικούς καταλόγους ανάλογα με το περιβάλλον σας - για παράδειγμα, δείτε την απάντηση του @Vimvq1987's.

Το CodeBase είναι το μέρος όπου βρέθηκε ένα αρχείο και μπορεί να είναι μια διεύθυνση URL που αρχίζει με http://. Σε αυτή την περίπτωση, η Location θα είναι πιθανώς η κρυφή μνήμη λήψης της συναρμολόγησης. Το CodeBase δεν είναι εγγυημένο ότι έχει οριστεί για σύνολα στο GAC.

Σχόλια (10)

Σημειώστε ότι δεν επιστρέφουν όλες αυτές οι μέθοδοι την ίδια τιμή. Σε ορισμένες περιπτώσεις, μπορούν να επιστρέψουν την ίδια τιμή, αλλά προσέξτε, οι σκοποί τους είναι διαφορετικοί:

Application.StartupPath

επιστρέφει την παράμετρο StartupPath (μπορεί να οριστεί κατά την εκτέλεση της εφαρμογής)

System.IO.Directory.GetCurrentDirectory()

επιστρέφει τον τρέχοντα κατάλογο, ο οποίος μπορεί να είναι ή να μην είναι ο φάκελος όπου βρίσκεται η εφαρμογή. Το ίδιο ισχύει και για την παράμετρο Environment.CurrentDirectory. Σε περίπτωση που το χρησιμοποιείτε σε ένα αρχείο DLL, θα επιστρέψει τη διαδρομή όπου εκτελείται η διεργασία (αυτό ισχύει ιδιαίτερα στο ASP.NET).

Σχόλια (3)

Για μια εφαρμογή ιστού, για να λάβετε τον τρέχοντα ριζικό κατάλογο της εφαρμογής ιστού, καλέστε γενικά την ιστοσελίδα για την τρέχουσα εισερχόμενη αίτηση:

HttpContext.Current.Server.MapPath();

System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;

Περιγραφή του παραπάνω κώδικα

Σχόλια (0)