Я хочу создать программу, которая конвертирует файлы. Я хотел бы, чтобы пользователь мог поместить исполняемый файл в любой каталог, и при выполнении этой программы (двойной щелчок на .exe) я хочу, чтобы программа обрабатывала все файлы в текущей папке, где существует исполняемый файл . Как программа может определить путь, по которому она выполняется в данный момент?
Я пытался, System.Windows.Forms.Application.StartupPath
но это, кажется, неправильный путь.
Любые идеи?
GetEntryAssembly
иGetExecutingAssembly
не вызывает особого удивления, также очевидна по названию функции. Если они сделали то же самое, почему должно быть две функции? :-)System.Reflection.Assembly.GetExecutingAssembly().Location
что это полное - если вы тестируете из Immediate WindowЭто даст вам рабочий каталог вашего приложения. Это даже работает для веб-приложений. После этого вы можете получить доступ к вашему файлу.
источник
Я создал простое консольное приложение со следующим кодом:
Я скопировал полученный исполняемый файл в
C:\temp2
. Затем я поместил ярлык на этот исполняемый файлC:\temp3
и запустил его (один раз из самого exe- файла и один из ярлыка). Это дало следующие результаты оба раза:Хотя я уверен, что должна быть какая-то дурацкая причина, чтобы объяснить, почему есть пять различных методов, которые делают практически одну и ту же вещь, я, конечно, не знаю, что это такое. Тем не менее, может показаться, что в большинстве случаев вы свободны выбирать тот, который вам нравится.
ОБНОВЛЕНИЕ: я изменил свойства ярлыка, изменив поле «Начать с:» на
C:\temp3
. Это привело к следующему выводу:... который демонстрирует, по крайней мере, некоторые различия между различными методами.
источник
Попробуй это:
System.Environment.CurrentDirectory
источник
Environment.CurrentDirectory
можно изменить несколькими способами ... (настройки shotrtcut и т. д.)Из
Path.GetDirectoryName
Из
Application.ExecutablePath
источник
Использовать это,
Вы также можете использовать это.
источник
для использования .NET CORE
System.AppContext.BaseDirectory
(в качестве замены
AppDomain.CurrentDomain.BaseDirectory
)источник
1.
2.
3.
источник
Environment.CurrentDirectory
можно изменить несколькими способами ... (настройки shotrtcut и т. д.)Используйте
Application.StartupPath
для лучшего результата ИМО.источник
Если вы хотите путь exe, вы можете использовать
System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location);
источник
Это работает лучше всего для меня, особенно при использовании публикации файлов в ядре dotnet.
Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName)
,источник