Получить текущий путь к папке
Я хочу создать программу, которая преобразует файлы. Я хотел бы, чтобы пользователь мог разместить исполняемый файл в любом каталоге, а при выполнении этой программы (дважды щелкнув на .exe) я хочу, чтобы программа обрабатывала все файлы в текущей папке, где exe файл существует. Как программа может определить путь, в котором она выполняется?
Я пробовал System.Windows.Forms.Application.StartupPath
, но это кажется неправильным.
Любые идеи?
Ответы
Ответ 1
В вашем случае вы должны не использовать Directory.GetCurrentDirectory()
, так как текущий каталог может отличаться от папки выполнения, особенно при выполнении программы с помощью ярлыка.
Лучше использовать Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
для вашей цели. Это возвращает имя пути, в котором находится текущая исполняемая сборка.
В то время как мой предложенный подход позволяет вам различать исполняющую сборку, сборку ввода или любую другую загруженную сборку, как сказал в своем ответе Сонер Гюнль,
System.IO.Path.GetDirectoryName(Application.ExecutablePath);
также может быть достаточным. Это будет равно
System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
Ответ 2
System.AppDomain.CurrentDomain.BaseDirectory
Это даст вам текущую директорию вашего приложения. Это даже работает для веб-приложений. Впоследствии вы можете связаться с вашим файлом.
Ответ 3
Я создал простое консольное приложение со следующим кодом:
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);
Я скопировал полученный исполняемый файл в C:\temp2
. Затем я разместил ярлык для этого исполняемого файла в C:\temp3
и запустил его (один раз из самого exe и один раз из ярлыка). Он выдавал следующие результаты одновременно:
C:\temp2
C:\temp2\
C:\temp2
C:\temp2
C:\temp2
Хотя я уверен, что для того, чтобы объяснить, почему существуют пять разных методов, которые должны делать практически то же самое, должно быть какое-то сообразительное соображение, я, конечно, не знаю, что это такое. Тем не менее, казалось бы, что в большинстве случаев вы можете сами выбирать то, что вам нравится.
UPDATE:
Я изменил свойства ярлыка, изменив поле "Начать в:" на C:\temp3
. Это привело к следующему выводу:
C:\temp2
C:\temp2\
C:\temp3
C:\temp3
C:\temp3
..., который демонстрирует, по крайней мере, некоторые различия между различными методами.
Ответ 4
Попробуй это:
System.Environment.CurrentDirectory
Ответ 5
string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath);
От Path.GetDirectoryName
Возвращает информацию каталога для указанной строки пути.
От Application.ExecutablePath
Возвращает путь к исполняемому файлу, который запускал приложение, включая имя исполняемого файла.
Ответ 6
Используйте это,
var currentDirectory = System.IO.Directory.GetCurrentDirectory();
Вы также можете использовать это.
var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
Ответ 7
1.
Directory.GetCurrentDirectory();
2.
Thread.GetDomain().BaseDirectory
3.
Environment.CurrentDirectory
Ответ 8
для .NET CORE используйте System.AppContext.BaseDirectory
(в качестве замены для AppDomain.CurrentDomain.BaseDirectory
)
Ответ 9
Используйте Application.StartupPath
для лучшего результата IMO.
Ответ 10
Если вы хотите путь exe, вы можете использовать System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly(). Location);