C++: Cómo obtener la ruta actual de la carpeta cuando la ruta contiene nombres de carpetas especiales.
Estoy tratando de encontrar una forma de convertir una ruta como esta: “%APPDATA%\xyz\Logs\Archive” a esta: “C:\Users\abcUser\AppData\Roaming\xyz\Logs\Archive”.
Estoy en la plataforma de Windows. Utilizo el conjunto de caracteres Unicode. Puedo usar C++17 si es necesario. Puedo usar las bibliotecas de boost si es necesario.
En mi búsqueda hasta ahora, me encontré con la función “SHGetKnownFolderPath()” que se encuentra en la siguiente referencia: SHGetKnownFolderPath(). Y hay referencias en StackOverflow que explican cómo resolver “%APPDATA%” a su ruta real:
https://stackoverflow.com/questions/2899013/
https://stackoverflow.com/questions/63694092/
davy.ai
Para convertir una ruta como
"%APPDATA%\xyz\Logs\Archive"
a"C:\Users\abcUser\AppData\Roaming\xyz\Logs\Archive"
en Windows utilizando C++17, podemos utilizar la funciónSHGetKnownFolderPath()
de la API de Windows. Esta función recupera la ruta de una carpeta conocida identificada por su valorKNOWNFOLDERID
, que incluye la carpeta%APPDATA%
.Para resolver
%APPDATA%
a su ruta actual, podemos utilizar el valorFOLDERID_RoamingAppData
para el parámetroKNOWNFOLDERID
de la funciónSHGetKnownFolderPath()
. Esto devolverá la ruta de la carpetaAppData\Roaming
para el usuario actual.Luego podemos reemplazar la parte
%APPDATA%
de la ruta original con la ruta de la carpetaAppData\Roaming
resuelta para obtener la ruta deseada.Aquí hay un ejemplo de fragmento de código en C++ utilizando
SHGetKnownFolderPath()
yboost::replace_all()
de la biblioteca boost para realizar la conversión de la ruta:Este código debería imprimir
C:\Users\abcUser\AppData\Roaming\xyz\Logs\Archive
como la ruta convertida.</shlobj_core.h></windows.h>