Jedyny i niezawodny sposób na otrzymanie bieżącego katalogu

Lis 26, 2013 Uncategorized

Jedyny i niezawodny sposób na otrzymanie bieżącego katalogu

Niedawno w projekcie pisałem małą apkę która wykonywała pewne działanie, które muszą być uruchamiane cyklicznie. W celu uzyskania dostępu do katalogu aplikacji użyłem zmiennej

 System.Environment.CurrentDirectory  .

Wszystko działało podczas debugowania. Jakies było moje zdziwienie, gdy okazało się, że zmienna ta wskazuje na katalog C:WindowsSystem32  podczas uruchamiania procesu przez Task Scheluder, zamiast katalogu aplikacji. Po długich lecz owocnych 🙂 poszukiwaniach udało mi się znaleźć rozwiązanie. Pewnym i niezawodnym sposobem na uzyskanie katalogu w którym znajduje się aplikacja jest :

 System.IO.Path.GetDirectoryName(System.Reflection.Assembly._ GetExecutingAssembly().Location) 

.

admin

Przezadmin

3 myśli w temacie “Jedyny i niezawodny sposób na otrzymanie bieżącego katalogu”
  1. To jak już przy ścieżkach jesteśmy to zapytam z ciekawości ilu z Was używa Uri.MakeRelativeUri do zbudowania ścieżki względnej?
    Większość internetu prowadzi do takiego rozwiązania nie mówiąc nic o pułapkach tej funkcji. Spróbujcie dodać do jednej czy drugiej ścieżki hasha i zobaczcie jak to wtedy działa 🙂
    Niby hash jest raczej nieużywany, ale nie można go wykluczyć. Odkryłem to przypadkiem odpalając jeden projekt w folderze "testowym" z C# w nazwie.. też można spędzić trochę czasu na debugowaniu tego 🙂

  2. Próbowałem to zaraz później powtórzyć i nie mogłem 🙂 Okazało się, że mnie pamięć oszukała.. to nie MakeRelativeUri nawala.. to sama obsługa klasy Uri.

    http://fidek.org/UriHash.png

    Mieliśmy w kodzie new Uri(Assembly.GetExecutingAssembly().CodeBase), a CodeBase jest zwracany w formacie z prefixem file:/// który powoduje takie właśnie traktowanie hasha. Dwa ostatnie przykłady pokazują jak to łatwo rozwiązać.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *