Получить букву диска из имени файла в Windows - PullRequest
6 голосов
/ 19 августа 2011

Существует ли функция Windows API для извлечения буквы диска из пути Windows, например

U:\path\to\file.txt
\\?\U:\path\to\file.txt

, при правильной сортировке

relative\path\to\file.txt:alternate-stream    

и т. Д.

Ответы [ 4 ]

11 голосов
/ 19 августа 2011

PathGetDriveNumber возвращает от 0 до 25 (что соответствует «A» - «Z»), если путь имеет букву диска, или -1 в противном случае.

3 голосов
/ 16 июня 2012

Вот код, который объединяет принятый ответ (спасибо!) С PathBuildRoot, чтобы округлить решение

#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);  
}
2 голосов
/ 28 мая 2014

В зависимости от ваших требований, вы также можете рассмотреть GetVolumePathName , чтобы получить точку монтирования, которая может быть или не быть буквой диска.

0 голосов
/ 19 августа 2011
#include <iostream>
#include <string>

using namespace std;

int main()
{    
    string aux;
    cin >> aux;
    int pos = aux.find(':', 0);
    cout << aux.substr(pos-1,1) << endl;
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...