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