В c++ 17 версии имеется библиотека
filesystem, позволяющаяя производить некоторые манипуляции с файловой системой компьютера. Что касательно вашего вопроса там есть такая функция как
bool create_directory(...). Данная функция принимает в качестве аргумента путь конец которого - имя папки для создания.
В Windows рабочий стол находится по пути:
/users/<имя_пользователя>/desktop/
В Unix-like (BSD, Linux и т.д.) по пути:
/home/<имя_пользователя>/desktop/
И того нам нужно получить имя юзера:
В Windows это как-то так:
#include <windows.h>
#include <Lmcons.h>
char username[UNLEN+1]; // <-- сюда запишется имя пользователя
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
Итого, код для Windows будет выглядеть как-то так:
#include <windows.h>
#include <Lmcons.h>
#include <filesystem>
#include <string>
namespace fs = std::filesystem; // Для краткости
bool createDesktopDir(std::string dir_name) {
char username[UNLEN+1];
DWORD username_len = UNLEN+1;
GetUserName(username, &username_len);
return fs::create_directory(std::string("/users/") + username + "/desktop/" + dir_name)
}
Для Unix-like ОС получения юзера выглядит так:
#include <unistd.h>
char username[1024] = {0};
getlogin_r(username, sizeof(username)-1);
А следовательно код для создания директории будет такой:
#include <unistd.h>
#include <filesystem>
#include <string>
namespace fs = std::filesystem;
bool createDesktopDir(std::string dir_name) {
char username[1024] = {0};
getlogin_r(username, sizeof(username)-1);
return fs::create_directory(std::string("/home/") + username + "/desktop/" + dir_name)
}
Для использования filesystem могут потребоваться дополнительные параметры компилятора / компоновщика. Реализация GNU до 9.1 (то есть GCC) требует связывания с -lstdc++fs, а реализация LLVM до LLVM 9.0 (то есть clang) требует связывания с -lc++fs.
С Unix могут быть проблемы если вы запустили программу от
root поскольку его домашняя директория находится по адресу
/root/, а следовательно и рабочий стол тут
/root/desktop/. Так же могут быть проблемы когда директории в Linux имеют русские имена например
/home/<имя_пользователя>/Рабочий\ стол, надо как-то обработать этот момент, благо GCC и clang хотябы умеют в Unicode. В Windows же могут быть проблемы с компиляторами MinGW если имя пользователя на русском (или другом языкие содержащим Unicode-символы) ибо использовать в путях на текущий момент они могут только в ASCII-символы, то есть только латиница. Тут либо кушать кактус и кидать из кодировки в кодировку, либо юзать visual c++. В общем удачи