My work code:
string toString(TCHAR* chars)
{
std::string s;
std::wstring wStr = chars;
s = std::string(wStr.begin(), wStr.end());
std::cout << s << std::endl;
return s;
}
BOOL GetFileNameFromHandle(HANDLE hFile, TCHAR* pszFileName, const unsigned int uiMaxLen)
{
pszFileName[0] = 0;
std::unique_ptr<BYTE[]> ptrcFni(new BYTE[_MAX_PATH * sizeof(TCHAR) + sizeof(FILE_NAME_INFO)]);
FILE_NAME_INFO* pFni = reinterpret_cast<FILE_NAME_INFO*>(ptrcFni.get());
BOOL b = GetFileInformationByHandleEx(hFile,
FileNameInfo,
pFni,
sizeof(FILE_NAME_INFO) + (_MAX_PATH * sizeof(TCHAR)));
if (b)
{
#ifdef _UNICODE
wcsncpy_s(pszFileName,
min(uiMaxLen, (pFni->FileNameLength / sizeof(pFni->FileName[0])) + 1),
pFni->FileName,
_TRUNCATE);
#else
strncpy_s(pszFileName,
min(uiMaxLen, (pFni->FileNameLength / sizeof(pFni->FileName[0])) + 1),
CW2A(pFni->FileName),
_TRUNCATE);
#endif
}
return b;
}
string Help::getFilePath(HANDLE handle)
{
TCHAR charName[1024];
bool res = GetFileNameFromHandle(handle, charName, 1024);
return toString(charName);
}
In main:
HANDLE hFile = ...;
string path = getFilePath(hFile);