GetLongPathName API Function Emulation

CodeGuru content and product recommendations are editorially independent. We may make money when you click on links to our partners. Learn More.

Environment: Windows 95/NT

The GetLongPathName API call is only available on Windows 98/ME and Windows 2000/XP. It is not available on Windows 95 & NT. This code example emulates the function for use on 95 & NT and will work on the other systems as well.

This example uses MFC and CString, but could be easily adapted to use null terminated character strings as well. The algorithm recursively strips off path components, then reassembles them with their long name equivalents.


DWORD GetLongPathName(CString strShortPath,
CString& strLongPath )
{
int iFound = strShortPath.ReverseFind(‘\’);
if (iFound > 1)
{
// recurse to peel off components
//

if (GetLongPathName(strShortPath.Left(iFound),
strLongPath) > 0)
{
strLongPath += ‘\’;

if (strShortPath.Right(1) != “\”)
{
WIN32_FIND_DATA findData;

// append the long component name to the path
//

if (INVALID_HANDLE_VALUE != ::FindFirstFile
(strShortPath, &findData))
{
strLongPath += findData.cFileName;
}
else
{
// if FindFirstFile fails, return the error code
//

strLongPath.Empty();
return 0;
}
}
}
}
else
{
strLongPath = strShortPath;
}

return strLongPath.GetLength();
}

More by Author

Get the Free Newsletter!

Subscribe to Developer Insider for top news, trends & analysis

Must Read