Como descubro em qual diretório meu aplicativo de console está sendo executado?


Respostas:


164

Para obter o diretório onde está o arquivo .exe:

AppDomain.CurrentDomain.BaseDirectory

Para obter o diretório atual:

Environment.CurrentDirectory

2
Obrigado. Ajuda quando o C # .exe está em uma pasta, mas é chamado de outra pasta (por exemplo: quando está no PATH do sistema)
DeepSpace101

14
Para .NET Core, sim System.AppContext.BaseDirectory.
NightOwl888

15

Dependendo dos direitos concedidos ao seu aplicativo, se a cópia de sombra está em vigor ou não e outras opções de invocação e implantação, métodos diferentes podem funcionar ou produzir resultados diferentes, portanto, você terá que escolher sua arma com sabedoria. Dito isso, todos os itens a seguir produzirão o mesmo resultado para um aplicativo de console totalmente confiável que é executado localmente na máquina onde reside:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

Você precisará consultar a documentação dos membros acima para ver as permissões exatas necessárias.



3

No .NET, você pode usar System.Environment.CurrentDirectorypara obter o diretório a partir do qual o processo foi iniciado.
System.Reflection.Assembly.GetExecutingAssembly().Locationinformará a localização do assembly em execução no momento (isso só é interessante se o assembly em execução no momento for carregado de algum lugar diferente do local do assembly onde o processo foi iniciado).


1

No Windows (não tenho certeza sobre Unix, etc.), é o primeiro argumento na linha de comando.

Em C / C ++ primeiro item em argv *

WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)


Sim, é o mesmo no .NET também. Primeiro arg é sempre o caminho completo do executável.
Adam Neal,

1

Application.StartUpPath;


preocupa-se em ligar a alguma documentação?
John Sheehan

0

Digamos que o nome do seu projeto de aplicativo de console principal .Net seja DataPrep.

Obtenha o diretório base do projeto:

Console.WriteLine(Environment.CurrentDirectory);

Saída: ~ DataPrep \ bin \ Debug \ netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

Saída: ~ DataPrep \


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.