Chcę stworzyć program, który konwertuje pliki. Chciałbym, aby użytkownik mógł umieścić plik wykonywalny w dowolnym katalogu, a podczas uruchamiania tego programu (dwukrotne kliknięcie pliku .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ę, w której aktualnie wykonuje?
Próbowałem, System.Windows.Forms.Application.StartupPath
ale wydaje się to niewłaściwy sposób.
Jakieś pomysły?
GetEntryAssembly
iGetExecutingAssembly
nie jest aż tak zaskoczeniem, jest również oczywista po nazwie funkcji. Jeśli zrobili to samo, dlaczego miałyby istnieć dwie funkcje? :-)System.Reflection.Assembly.GetExecutingAssembly().Location
jest kompletne - jeśliTo da ci bieżący katalog twojej aplikacji. Działa to nawet w przypadku aplikacji internetowych. Następnie możesz dotrzeć do pliku.
źródło
Utworzyłem prostą aplikację konsoli z następującym kodem:
Skopiowałem wynikowy plik wykonywalny do
C:\temp2
. Następnie umieściłem skrót do tego pliku wykonywalnegoC:\temp3
i uruchomiłem go (raz z samego pliku exe i raz ze skrótu). Za każdym razem dawał następujące wyniki:Choć jestem pewien, że musi istnieć jakiś powód do wyjaśnienia, dlaczego istnieje pięć różnych metod, które robią praktycznie dokładnie to samo, ale z pewnością nie wiem, co to jest. Niemniej jednak wydaje się, że w większości przypadków masz swobodę wyboru tego, co ci się podoba.
AKTUALIZACJA: Zmodyfikowałem właściwości skrótu, zmieniając pole „Rozpocznij w:” na
C:\temp3
. Spowodowało to następujące wyniki:... co pokazuje przynajmniej niektóre różnice między różnymi metodami.
źródło
Spróbuj tego:
System.Environment.CurrentDirectory
źródło
Environment.CurrentDirectory
można zmienić na wiele sposobów ... (ustawienia shotrtcut itp.)Z
Path.GetDirectoryName
Z
Application.ExecutablePath
źródło
Użyj tego,
Możesz również tego użyć.
źródło
do użytku .NET CORE
System.AppContext.BaseDirectory
(jako zamiennik
AppDomain.CurrentDomain.BaseDirectory
)źródło
1.
2)
3)
źródło
Environment.CurrentDirectory
można zmienić na wiele sposobów ... (ustawienia shotrtcut itp.)Użyj,
Application.StartupPath
aby uzyskać najlepszy efekt imo.źródło
Jeśli chcesz ścieżkę exe, możesz użyć
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
źródło
Działa to dla mnie najlepiej, szczególnie w przypadku publikowania pojedynczego pliku dotnet core.
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
.źródło