Vidím, že existuje niekoľko spôsobov, ako získať cestu k priečinku aplikácie:
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)`
Aký spôsob je najlepší v závislosti od situácie?
AppDomain.CurrentDomain.BaseDirectory
je pravdepodobne najužitočnejší na prístup k súborom, ktorých umiestnenie je relatívne voči inštalačnému adresáru aplikácie.
V aplikácii ASP.NET to bude koreňový adresár aplikácie, nie podpriečinok bin - čo je pravdepodobne to, čo zvyčajne chcete. V klientskej aplikácii to bude adresár obsahujúci hlavný spustiteľný súbor.
V aplikácii VSTO 2005 to bude adresár obsahujúci riadené zostavy VSTO pre vašu aplikáciu, nie napríklad cesta k spustiteľnému súboru programu Excel.
Ostatné môžu vrátiť rôzne adresáre v závislosti od vášho prostredia - pozri napríklad odpoveď @Vimvq1987'.
CodeBase
je miesto, kde bol súbor nájdený, a môže to byť adresa URL začínajúca na http://. V takom prípade bude Location
pravdepodobne vyrovnávacia pamäť na stiahnutie zostavy. Nie je zaručené, že CodeBase bude nastavená pre zostavy v GAC.
Všimnite si, že nie všetky tieto metódy vrátia rovnakú hodnotu. V niektorých prípadoch môžu vrátiť rovnakú hodnotu, ale pozor, ich účely sú odlišné:
Application.StartupPath
vráti parameter StartupPath
(môže byť nastavený pri spustení aplikácie)
System.IO.Directory.GetCurrentDirectory()
vráti aktuálny adresár, ktorý môže, ale nemusí byť adresárom, v ktorom sa nachádza aplikácia. To isté platí pre Environment.CurrentDirectory
. V prípade, že ju používate v súbore DLL, vráti cestu k miestu, kde je proces spustený (to platí najmä v ASP.NET).
Ak chcete získať aktuálny koreňový adresár webovej aplikácie, vo všeobecnosti volajte webovú stránku pre aktuálnu prichádzajúcu požiadavku:
HttpContext.Current.Server.MapPath();
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath;