Pobierz bieżącą ścieżkę folderu
Chcę stworzyć program, który konwertuje pliki. Chciałbym, aby użytkownik mógł umieścić plik wykonywalny w dowolnym katalogu, a podczas wykonywania tego programu (dwukrotne kliknięcie na .exe) chcę, aby program przetwarzał wszystkie pliki w bieżącym folderze, w którym istnieje plik exe . W jaki sposób program może określić ścieżkę, na której jest aktualnie wykonywany?
Próbowałem System.Windows.Forms.Application.StartupPath
ale to chyba zły sposób.
8 answers
Powinieneś Nie używać Directory.GetCurrentDirectory()
w Twoim przypadku, ponieważ bieżący katalog może różnić się od folderu wykonania, zwłaszcza gdy wykonujesz program za pomocą skrótu.
Lepiej użyć Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
do swojego celu. Zwraca To nazwę ścieżki, w której znajduje się aktualnie wykonujący się zespół.
Podczas gdy moje sugerowane podejście pozwala na rozróżnienie pomiędzy wykonującym montażem, montażem wejściowym lub dowolnym innym załadowanym zespołem, jak Soner Gönül powiedział w swoim ODPOWIEDŹ,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Może być również wystarczające. Będzie to równe
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 19:02:45
System.AppDomain.CurrentDomain.BaseDirectory
To da ci uruchomiony katalog Twojej aplikacji. Działa to nawet w przypadku aplikacji internetowych. Następnie możesz dotrzeć do pliku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 06:58:38
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
Zwraca informacje o Katalogu dla podanego ciągu ścieżki.
Pobiera ścieżkę do pliku wykonywalnego, który uruchomił aplikację, łącznie z nazwą wykonywalną.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 19:03:02
Spróbuj tego:
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-20 08:47:18
Stworzyłem prostą aplikację konsolową o następującym kodzie:
Console.WriteLine(System.IO.Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));
Console.WriteLine(System.AppDomain.CurrentDomain.BaseDirectory);
Console.WriteLine(System.Environment.CurrentDirectory);
Console.WriteLine(System.IO.Directory.GetCurrentDirectory());
Console.WriteLine(Environment.CurrentDirectory);
Skopiowałem wynikowy plik wykonywalny do C:\temp2
. Następnie umieściłem skrót do tego pliku wykonywalnego w C:\temp3
i uruchomiłem go (raz z samego exe, a raz ze skrótu). Dawał on dwa razy następujące wyjścia:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Chociaż jestem pewien, że musi być jakiś jakiś powód, aby wyjaśnić, dlaczego istnieje pięć różnych metod które robią dokładnie to samo, to na pewno nie wiesz, co to jest. Niemniej jednak, wydaje się, że w większości okoliczności, jesteś wolny, aby wybrać, który chcesz.
Aktualizacja:
Zmodyfikowałem właściwości skrótu, zmieniając pole" Start In:" na C:\temp3
. W rezultacie uzyskano następujące wyjście:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
...co pokazuje co najmniej niektóre rozróżnienia między różnymi metodami.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 19:42:43
Użyj tego,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
Możesz również użyć tego.
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-01 19:05:07
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-27 07:50:02
Użycie Application.StartupPath
za najlepszy wynik imo.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-04 18:43:47