| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Общие вопросы > Конвертировать FileName в переменные среды |
| Автор: Чучмек 5.7.2012, 13:45 |
| Есть ли функция, которая преобразует строки типа C:\Program Files\My\My.file в %ProgramFiles%\My\My.file ? И наоборот? Неохота городить огород. |
| Автор: Ne1tr1n0 5.7.2012, 22:04 |
| Надо что-то обратное http://msdn.microsoft.com/en-us/library/windows/desktop/ms724265%28v=vs.85%29.aspx? Если да, то это наверное подойдет: http://msdn.microsoft.com/en-us/library/windows/desktop/bb773760%28v=vs.85%29.aspx |
| Автор: Чучмек 5.7.2012, 22:33 |
| За первую функцию спасибо. Вторая, к сожалению, работает не так, как хотелось. Вместо %temp%\3.tmp возвращает %USERPROFILE%\Local Settings\Temp\3.tmp |
| Автор: Ne1tr1n0 5.7.2012, 23:18 |
| к сожалению да, она только некоторые переменные среды парсит и заменяет значение в строке на имя переменной (всего 7 значений, перечислены в статье по ссылке). Почему только эти, и не берет остальные непонятно. Видимо придется все-таки городить велосипед. По идее можно с помощью http://msdn.microsoft.com/en-us/library/windows/desktop/ms683187%28v=vs.85%29.aspx получить все переменные среды для процесса и самому распарсить результат, проверить его на предмет наличия в исходной строке. В результат вывести строку, в которой наибольший путь (по длине или же по кол-ву оставшихся слешей) заменен переменной. |
| Автор: Чучмек 5.7.2012, 23:30 |
| Да я примерно так и делаю, через GetEnvironmentStrings. Выбираю те, которые X:\... , сортирую по длине, и ищу вхождение. |
| Автор: Ne1tr1n0 5.7.2012, 23:54 | ||
Вот набросал тут примерный вариант функции. Вроде работает. Возможно конечно придется внести какие-то дополнительные проверки, на регистр может быть или ещё на что-нить, да и мог накосячить (время-то позднее):
|