CreateDirectory("C:\\Users\\Username\\Desktop\\Dir",NULL);string username = getenv("username");
CreateDirectory(L"C:\\Users\\"+username+"\\Desktop\\Dir",NULL); Users располагается на C:?%USERPROFILE%, а не заниматься ручным склеиванием кусочков, как в вашем примере. В %USERPROFILE% содержится полный путь к домашней директории текущего пользователя. От него и начинайте танцевать.+ широкие строковые литералы и узкую std::string - бесполезное занятие. Почему вы смешиваете широкие и узкие строки в своем коде? Хотите работать с широкими строками - работайте с широкими строками. std::wstring, а не std::string. SHGetKnownFolderPath[?].KNOWNFOLDERID[?].FOLDERID_Desktop для получения папки рабочего стола пользователя.CoTaskMemFree[?] для освобождения памяти, переданной из функции через указатель ppszPath.wchar_t* path_buffer = nullptr;
if( FAILED( ::SHGetKnownFolderPath( FOLDERID_Desktop, KF_FLAG_DEFAULT, 0, &path_buffer ) ) )
{
::CoTaskMemFree( path_buffer );
LOG_ERROR( LOG_CHANNEL, "Failed to get known directory; error - #{:08X}.", ::GetLastError() );
// terminate ...
}
std::wstring user_desktop_path{ path_buffer };
::CoTaskMemFree( path_buffer );
// whatever with `user_desktop_path` ...std::wstring для username. А вместо экранирования можно либо использовать сырые строки LR"(path\to\file)", либо просто писать прямой слэш, а не обратныйL"path/to/file". И как правильно уже заметили, используй STL Filesystem. Домашний каталог лучше брать из переменной окружения (environment variable).