VC 根据文件路径获取设备路径及设备名
来源:互联网 发布:大数据需要什么设备 编辑:程序博客网 时间:2024/05/21 08:02
项目中间遇到一个问题,需要判断文件在哪个设备上,翻了一遍MSDN,找到了下面的解决方案。
有人可能会觉得_splitPath就可以了,这是不行的,因为_splitPath不能正确获取挂载到目录的设备。
解决思路方法是GetVolumePathName获取设备根路径,然后调用GetVolumeNameForVolumeMountPoint获取设备的名称。之所以要获取设备的名称是因为:CreatFile的输入路径必须是设备名,对于有盘符的设备根路径(如C:),设备根路径加上设备前缀就是设备别名(如\\?\C:),但是对于挂载到文件夹的设备,设备根路径加上设备前缀并不是设备别名。
示例代码如下:
wstring GetVolumePathByFile(LPCWSTR path){
WCHAR volume_path[MAX_PATH+1]={0};
if(!GetVolumePathNameW(path, volume_path, MAX_PATH+1)){
DWORD error = GetLastError();
MYDEBUGTRACE(L"GetVolumePathNameW for %s failed(%d): %s"
, path, error, MYERROR2STRING(error).GetBuffer());
}else{
volume_path[wcslen(volume_path)-1] = L'\0';
MYDEBUGTRACE(L"file %s volume path is %s", path, volume_path);
return wstring(volume_path);
}
return wstring();
}
wstring GetVolumeNameByFile(LPCWSTR in_path){
wstring volume_path = GetVolumePathByFile(in_path);
if(volume_path.empty()){
MYDEBUGTRACE(L"GetVolumeNameByFile failed: GetVolumePathByFile failed\n");
return wstring();
}
volume_path += L"\\";
WCHAR volume_name[MAX_PATH+1];
if(!GetVolumeNameForVolumeMountPointW(volume_path.c_str(), volume_name, MAX_PATH+1)){
DWORD error = GetLastError();
MYDEBUGTRACE(L"GetVolumeNameForVolumeMountPoint failed, path: %s, code(%d): %s"
,volume_path.c_str(), error, MYERROR2STRING(error).GetBuffer());
return wstring();
}else{
MYDEBUGTRACE(L"path %s volume name is %s",in_path, volume_name);
return wstring(volume_name);
}
}
- VC 根据文件路径获取设备路径及设备名
- 根据VID PID获取USB设备路径
- 获取全部存储设备路径
- 根据GUID获得设备路径(转载)
- 根据网卡设备名获取网卡型号
- Shell脚本根据设备名自动获取设备号
- 获取模块文件路径名
- VC中获取文件路径
- VC中获取文件路径
- VC文件路径的获取
- C#:基于WDK获取设备路径集合
- android 获取 内外存储设备路径疑问
- android 获取 内外存储设备路径疑问
- android 获取 内外存储设备路径疑问
- android 获取外部存储设备路径
- 获取安卓设备外置SD路径
- Android获取存储设备挂载路径
- VC++根据路径遍历所有文件
- [二分图匹配]poj2446__Chessboard
- 判断手机号码是否合法(完整实现程序)
- 设计一个类只能生成该类的一个实例
- Install Chrome-google in Centos7
- 位运算的使用(Floyd)
- VC 根据文件路径获取设备路径及设备名
- 处理C++源代码的程序(1)
- 安装SQL Server 2012 出现 Error code 0x858C001B报错
- Node.js学习2-NPM介绍、使用
- word2vect训练
- 数据库操作
- Hibernate注解使用以及Spring整合
- 八进制转换
- 第十六周程序阅读(5)