Um erro comum em wxWidgets é usar wxGetCwd() para pegar o diretório da aplicação, este comando retorna o diretório de trabalho atual, em alguns casos, onde nenhum arquivo fora do diretório da aplicação é acessado, este comando pode até funcionar, mas quando saímos do diretório da aplicação este comando retorna um valor diferente do esperado.
Vejam por exemplo o que este comando retorna quando eu tento abrir um arquivo que está no meu Desktop diretamente em um sistema que está em /home/alex/Documentos/gerbsox/bin/Debug
E se eu tentar executar o mesmo pelo Code::Blocks o resultado será o seguinte:
Para contornar esta situação eu uso uma função bem simples que segue a baixo:
//Primeiro adiciono o arquivo de cabeçalho que contém wxStandardPaths #include <wx/stdpaths.h> //Aqui implemento um função chamada GetExecPath() que me retornará uma wxString... wxString GetExecPath() { //Esta função wxStandardPaths::Get().GetExecutablePath() //me retorna um caminho completo para o executável //incluindo o nome do executável, o que não é o que nós queremos... wxString path_c = wxStandardPaths::Get().GetExecutablePath(); //Resolvemos o problema usando wxPathOnly(...) //que vai retornar apenas o valor do diretório removendo o nome do arquivo... wxString path_ok = wxPathOnly(path_c); //Agora é só eu retornar o valor correto do diretório da aplicação... return path_ok; //poderíamos economizar código escrevendo a função inteira assim: //return wxPathOnly(wxStandardPaths::Get().GetExecutablePath()); }
Vejam que se eu não usar o wxPathOnly(...), o nome do executável também aparecerá na string
Onde /home/alex/Documentos/gerbsox/bin/Debug é o diretório da minha aplicação e gerbsox é o meu executável...
Vamos repetir o que foi feito anteriormente para ver o que o comando vai nos retornar.
Aqui executando o aplicativo pelo CodeBlocks...
...e aqui abrindo o arquivo que estava na área de trabalho...
Espero ter ajudado em alguma coisa.
Até a próxima...
0 comentários:
Postar um comentário