Иногда вещи не такие как ты думаешь

December 8th, 2009 Begemot Posted in Программирование

Как думаете что будет в str?

wxConfigBase * config = wxConfigBase::Get();

config->Write(_T("/Options/teeestg"), _T("-\\&-"));

wxString str = config->Read(_T("/Options/teeestg"), str);

неправильно, будет “-&-”. Тоже самое и при использовании % вместо &. Проблема оказывается в том что при чтении из конфига автоматически раскрываются переменные окружения.

if you have the following in your config file:

  # config file for my program
  UserData = $HOME/data

  # the following syntax is valud only under Windows
  UserData = %windir%\\data.dat
 

the call to config->Read("UserData") will return something like "/home/zeitlin/data" if you’re lucky enough to run a Linux system 😉

Although this feature is very useful, it may be annoying if you read a value which containts ‘$’ or ‘%’ symbols (% is used for environment variables expansion under Windows) which are not used for environment variable expansion. In this situation you may call SetExpandEnvVars(false) just before reading this value and SetExpandEnvVars(true) just after. Another solution would be to prefix the offending symbols with a backslash.

Чтобы это отключить, необходимо вызвать config->SetExpandEnvVars(false);

С одной стороны вроде все описано и логично, но с другой я все таки не понимаю почему в сочетании \$, код библиотеки удаляет первый слеш, вот сижу думаю это баг и надо его запостить в трекер или все-таки нет.

Думаете надуманная ситуация? Ничего подобного, баг нашел юзер у которого имя пользователя в винде начинается с $ и это вызвано корпоративными стандартами, в этом случае путь к файлам пользователя получается “C:\Documents and

Settings\$xxx\Application Data\xxx\” ну и сразу после установки, программа не может открыть базу данных…


Если пост полезен для вас вы можете подписаться на RSS или мы можем доставлять вам новые посты прямо в ваш почтовый ящик.

Related:

Comments are closed.