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.

Jakieś pomysły?
Author: Hossein Narimani Rad, 2013-03-27

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);
 236
Author: Thorsten Dittmar,
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.

 82
Author: hakan,
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);

Od Path.GetDirectoryName

Zwraca informacje o Katalogu dla podanego ciągu ścieżki.

Od Application.ExecutablePath

Pobiera ścieżkę do pliku wykonywalnego, który uruchomił aplikację, łącznie z nazwą wykonywalną.

 20
Author: Soner Gönül,
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
 20
Author: Hossein Narimani Rad,
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.

 18
Author: kmote,
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);
 15
Author: Faisal Hafeez,
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
 6
Author: Tomtom,
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.

 0
Author: farosch,
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