Как узнать абсолютный путь к рабочему столу?

В общем мне нужно узнать путь к рабочему столу пользователя, чтобы потом его можно было использовать (к примеру создать там какой-либо файл). Причём этот путь должен быть универсален для любого ПК.

Пока что научился создавать файл по относительному пути.

    #include <iostream>
    #include <fstream>
    #include <string>
    
    using namespace std;
    
    int main()
    {
        int a;
        string path;
        ofstream myfile;
        for (int i = 0; i < 10; i++) //цикл, создающий 10 файлов
        {
            path = "C:\\Users\\never\\OneDrive\\Рабочий стол\\thefile" + to_string(i) + ".txt"; //относительный путь
            myfile.open(path);
            myfile << "Some txt"; //какой-то текст
            myfile.close();
        }
    }

Помогите пожалуйста решить проблему.


Ответы (2 шт):

Автор решения: V-Mor

Путь к рабочему столу можно получить с помощью WinAPI функции SHGetFolderPath. Насчёт универсален для любого ПК – нет, только для ПК с Windows. Но тем не менее, вот код, который вытаскивает путь к рабочему столу пользователя:

#include <iostream>
#include <Shlobj.h>


int main()
{
    char * szPath = new char[256];
    ::SHGetFolderPath(NULL, CSIDL_DESKTOP, NULL, 0, szPath);
    std::cout << szPath << std::endl;

    return 0;
}

Код далеко не эталон, но показывает основной принцип.

→ Ссылка
Автор решения: neon1ks

Можно воспользоваться функцией getenv() (или getenv_s()) для получения пути до домашней директории пользователя, и далее изменить путь до рабочего стола:

#include <stdlib.h>

#include <iostream>
#include <string>


int main()
{
    std::string desktopPath = std::string(getenv("USERPROFILE")) + "\\Desktop";
    std::cout << desktopPath << std::endl;
    return 0;
}
→ Ссылка