Obter o caminho da pasta atual

Eu quero criar um programa que converta arquivos. Eu gostaria que o usuário fosse capaz de colocar o arquivo executável em qualquer diretório, e ao executar esse programa (clicando duas vezes no arquivo .exe) eu quero que o programa processe todos os arquivos dentro da pasta atual onde o arquivo exe existe . Como o programa pode determinar o caminho no qual está sendo executado atualmente?

Eu tentei System.Windows.Forms.Application.StartupPath mas parece ser o caminho errado.

Alguma ideia?

Você não deve usar Directory.GetCurrentDirectory() no seu caso, já que o diretório atual pode ser diferente da pasta de execução, especialmente quando você executa o programa através de um atalho.

É melhor usar Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); para o seu propósito. Isso retorna o nome do caminho no qual a assembly atualmente em execução reside.

Embora minha abordagem sugerida permita diferenciar entre o assembly em execução, o assembly de input ou qualquer outro assembly carregado, como Soner Gönül disse em sua resposta,

 System.IO.Path.GetDirectoryName(Application.ExecutablePath); 

também pode ser suficiente. Isso seria igual a

 System.IO.Path.GetDirectoryName(Assembly.GetEntryAssembly().Location); 
 System.AppDomain.CurrentDomain.BaseDirectory 

Isso lhe dará o diretório de execução do seu aplicativo. Isso funciona até mesmo para aplicativos da web. Depois você pode acessar seu arquivo.

Tente isto:

System.Environment.CurrentDirectory

 string appPath = System.IO.Path.GetDirectoryName(Application.ExecutablePath); 

De Path.GetDirectoryName

Retorna as informações do diretório para a cadeia de caminho especificada.

De Application.ExecutablePath

Obtém o caminho para o arquivo executável que iniciou o aplicativo, incluindo o nome do executável.

Eu criei um aplicativo de console simples com o seguinte código:

 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); 

Eu copiei o executável resultante para C:\temp2 . Em seguida, coloquei um atalho para esse executável em C:\temp3 e executei-o (uma vez no próprio exe e uma vez no atalho). Deu as seguintes saídas nas duas vezes:

 C:\temp2 C:\temp2\ C:\temp2 C:\temp2 C:\temp2 

Embora eu tenha certeza de que deve haver algum motivo para explicar por que existem cinco methods diferentes que fazem exatamente a mesma coisa, eu certamente não sei o que é. No entanto, parece que, na maioria das circunstâncias, você é livre para escolher o que quiser.

UPDATE: modifiquei as propriedades do atalho, alterando o campo “Iniciar em:” para C:\temp3 . Isso resultou na seguinte saída:

 C:\temp2 C:\temp2\ C:\temp3 C:\temp3 C:\temp3 

… que demonstra pelo menos algumas das distinções entre os diferentes methods.

Usa isto,

 var currentDirectory = System.IO.Directory.GetCurrentDirectory(); 

Você pode usar isso também.

 var currentDirectory = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location); 

1

 Directory.GetCurrentDirectory(); 

2

 Thread.GetDomain().BaseDirectory 

3

 Environment.CurrentDirectory 

Use Application.StartupPath para o melhor resultado imo.