Here is the code that combines the accepted answer (thanks!) With PathBuildRoot to round off the solution
#include <Shlwapi.h> // PathGetDriveNumber, PathBuildRoot #pragma comment(lib, "Shlwapi.lib") /** Returns the root drive of the specified file path, or empty string on error */ std::wstring GetRootDriveOfFilePath(const std::wstring &filePath) { // get drive # http://msdn.microsoft.com/en-us/library/windows/desktop/bb773612(v=vs.85).aspx int drvNbr = PathGetDriveNumber(filePath.c_str()); if (drvNbr == -1) // fn returns -1 on error return L""; wchar_t buff[4] = {}; // temp buffer for root // Turn drive number into root http://msdn.microsoft.com/en-us/library/bb773567(v=vs.85) PathBuildRoot(buff,drvNbr); return std::wstring(buff); }
source share