Как узнать абсолютный путь к рабочему столу?
В общем мне нужно узнать путь к рабочему столу пользователя, чтобы потом его можно было использовать (к примеру создать там какой-либо файл). Причём этот путь должен быть универсален для любого ПК.
Пока что научился создавать файл по относительному пути.
#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 шт):
Путь к рабочему столу можно получить с помощью 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;
}
Код далеко не эталон, но показывает основной принцип.
Можно воспользоваться функцией 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;
}