在Windows中从文件名中获取驱动器号

时间:2011-08-19 13:05:16

标签: c++ winapi filesystems drive-letter

是否有Windows API函数从Windows路径中提取驱动器号,例如

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

正确整理

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

等?

4 个答案:

答案 0 :(得分:10)

如果路径有驱动器号,则

PathGetDriveNumber返回0到25(对应于'A'到'Z'),否则返回-1。

答案 1 :(得分:3)

以下是将接受的答案(谢谢!)与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 :(得分:1)

根据您的要求,您可能还需要考虑GetVolumePathName来获取挂载点,这可能是也可能不是驱动器号。

答案 3 :(得分:0)

#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;
}