Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 31124|Resposta: 2

[Programa de Console] Fique atento ao System.Environment.CurrentDirectory para obter o diretório atual

[Copiar link]
Publicado em 10/11/2020 15:04:17 | | | |
No meu trabalho recente, quero criar uma pequena ferramenta para lembretes aos clientes; Naturalmente, o programa winform deve ler o arquivo de configuração do mesmo diretório do aplicativo (não o arquivo exe.config);

Para ler o diretório onde a aplicação atual está localizada, imediatamente pensei em System.Environment.CurrentDirectory para obter o diretório funcional atual. O programa parece rodar perfeitamente;

Quando cheguei ao trabalho na manhã seguinte, apareceu: "Ler arquivo de configuração faltando". O app adiciona início automático de inicialização. Essa mensagem aparece para ler a falha do arquivo de configuração e verificar imediatamente se o arquivo de configuração no diretório do aplicativo foi deletado sozinho. Depois de verificar, descobri que o arquivo ainda estava lá, saí do programa e rodei novamente

Ainda está bem, nenhum perfil de leitura pop-up faltando. Então veja se o caminho da entrada de boot no registro não está no meu diretório? Olhando o arquivo de caminho, está tudo bem. Um pouco confuso? Sai do computador e tentei reiniciar, mas ainda aparece o arquivo de configuração faltando. A razão para não conseguir encontrar o caminho será tomada diretamente

MessageBox, o programa executa e descobre que o caminho é realmente esse caminho.

Adicione o código MessageBox e continue iniciando o teste. Quando liguei, percebi que o diretório atual que apareceu era C:\Windows\System32, e fiquei confuso na hora. Pensei comigo mesmo, será que o programa do Lao Tzu chegou até o system32? Checando o registro e o sysetm32 não têm meu app. Por fim, achei que deveria haver um problema com o código para obter o caminho.

Após testes repetidos, foi constatado que System.Environment.CurrentDirectory realmente é para obter o diretório atual, mas se o programa A chamar o programa B e o programa B usa System.Environment.CurrentDirectory para obter o diretório. Então, o diretório obtido no programa B não é mais o diretório onde a aplicação B está localizada; Ele se torna o diretório onde A está localizado. Não é difícil encontrar que o diretório que aparece quando eu inicializo é C:\Windows\System32, porque o programa de autoinicialização também é chamado por um processo no Windows.

Portanto, se o programa winform quiser obter o diretório onde a aplicação atual está localizada, é melhor não usar System.Environment.CurrentDirectory. Em vez disso, é: Application.StartupPath Dessa forma, não importa quem chame.

Código de teste:




Transferido de:O login do hiperlink está visível.




Anterior:Comparação entre flanela e malha de rede K8S
Próximo:C# coloca DLLs de bibliotecas de referência em subpastas por meio de sondagem
 Senhorio| Publicado em 10/11/2020 15:08:26 |
C# é uma coleção de métodos para obter o caminho atual de execução do programa

Obtenha o caminho completo até o processo atual, incluindo o nome do arquivo (nome do processo).
string str = isso. GetType(). Assembly.Location;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

O caminho completo para o módulo principal que recebe o novo componente Processo e o associa ao processo atualmente ativo, incluindo o nome do arquivo (nome do processo).
string str = System.Diagnostics.Process.GetCurrentProcess(). MainModule.NomeArquivo;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

//获取和设置当前目录(即该进程从中启动的目录)的完全限定路径。
string str = System.Environment.CurrentDirectory;
result: X:\xxx\xxx (.exe文件所在的目录)

Obtém o diretório base do domínio de aplicação atual da Thread atual, que é usado pelo solucionador de conflitos de montagem para sondar o montador.
string str = System.AppDomain.CurrentDomain.BaseDirectory;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Obtenha e defina o nome do diretório que contém o aplicativo. (Recomendado)
string str = System.AppDomain.CurrentDomain.SetupInformation.ApplicationBase;
result: X:\xxx\xxx\ (.exe文件所在的目录+"\")

Obtenha o caminho para o arquivo executável que iniciou a aplicação, excluindo o nome do executável.
string str = System.Windows.Forms.Application.StartupPath;
result: X:\xxx\xxx (.exe文件所在的目录)

//获取启动了应用程序的可执行文件的路径,包括可执行文件的名称。
string str = System.Windows.Forms.Application.ExecutablePath;
result: X:\xxx\xxx\xxx.exe (.exe文件所在的目录+.exe文件名)

Obtenha o diretório funcional atual da aplicação (não confiável).
string str = System.IO.Directory.GetCurrentDirectory();
result: X:\xxx\xxx (.exe文件所在的目录)
Publicado em 22/09/2021 20:38:52 |
Aprenda a aprender...
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com