win32 DOS路径与NT路径转换
#include <wtypesbase.h>
#include <tchar.h>
#include <string>
#ifdef _UNICODE
using _tstring = std::wstring;
#else
using _tstring = std::string;
#endif
_tstring DosPathToNtPath(const _tstring& strPath)
{
_tstring strResultPath;
TCHAR szDriveStrings[MAX_PATH] = { 0 };
TCHAR szDosBuf[MAX_PATH] = { 0 };
TCHAR szResultBuf[MAX_PATH] = { 0 };
LPTSTR pDriveStr = NULL;
// 获取盘符名到缓冲
if (::GetLogicalDriveStrings(_countof(szDriveStrings), szDriveStrings))
{
// 遍历盘符名
for (int i = 0; i < _countof(szDriveStrings); i += 4)
{
pDriveStr = &szDriveStrings[i];
pDriveStr[2] = _T('\0');
// 查询盘符对应的DOS设备名称
if (!::QueryDosDevice(pDriveStr, szDosBuf, _countof(szDosBuf)))
{
break;
}
// 对比路径前缀
size_t nLen = _tcslen(szDosBuf);
if (0 == _tcsnicmp(strPath.c_str(), szDosBuf, nLen))
{
lstrcpy(szResultBuf, pDriveStr);
lstrcat(szResultBuf, strPath.c_str() + nLen);
strResultPath = szResultBuf;
break;
}
}
}
return strResultPath;
}
_tstring NtPathToDosPath(const _tstring& strPath)
{
_tstring strResultPath;
TCHAR szDriveStrings[MAX_PATH] = { 0 };
TCHAR szDosBuf[MAX_PATH] = { 0 };
TCHAR szResultBuf[MAX_PATH] = { 0 };
LPTSTR pDriveStr = NULL;
// 获取盘符名到缓冲
if (::GetLogicalDriveStrings(_countof(szDriveStrings), szDriveStrings))
{
// 遍历盘符名
for (int i = 0; i < _countof(szDriveStrings); i += 4)
{
pDriveStr = &szDriveStrings[i];
pDriveStr[2] = _T('\0');
// 查询盘符对应的DOS设备名称
if (!::QueryDosDevice(pDriveStr, szDosBuf, _countof(szDosBuf)))
{
break;
}
// 对比路径前缀
size_t nLen = _tcslen(pDriveStr);
if (0 == _tcsnicmp(strPath.c_str(), pDriveStr, nLen))
{
lstrcpy(szResultBuf, szDosBuf);
lstrcat(szResultBuf, strPath.c_str() + nLen);
strResultPath = szResultBuf;
break;
}
}
}
return strResultPath;
}
int main()
{
TCHAR szCurPath[MAX_PATH] = { 0 };
::GetModuleFileName(NULL, szCurPath, _countof(szCurPath));
_tstring strDosPath;
_tstring strNtPath = szCurPath;
strDosPath = NtPathToDosPath(strNtPath);
strNtPath = DosPathToNtPath(strDosPath);
return 0;
}
原文地址:https://blog.csdn.net/Flame_Cyclone/article/details/136387795
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!