A customer was having trouble obtaining information from a shortcut file. “Here is a sample program that tries to print the target of a shortcut file, but it only gets the file name without a directory. How do I get the full path?”
IShellLink *psl;
... code that loads the IShellLink omitted ...
TCHAR szPath[MAX_PATH];
WIN32_FIND_DATA wfd;
hr = psl->GetPath(szPath, MAX_PATH, &wfd, SLGP_UNCPATH);
if (SUCCEEDED(hr)) {
_tprintf(TEXT("Got path: %s\n"), wfd.cFileName);
}
Recall that the WIN32_FIND_DATA structure
contains only a file name in the cFileName member.
It doesn’t have any path information.
The WIN32_FIND_DATA structure was
originally created for the FindFirstFile
function,
and you already know the directory you are searching in
because you passed it to
FindFirstFile.
But we’re not using the
WIN32_FIND_DATA structure in
conjunction with
FindFirstFile,
so where do I get the directory from?
In the customer’s excitement over the
WIN32_FIND_DATA structure,
they forgot about that other parameter:
szPath.
if (SUCCEEDED(hr)) {
_tprintf(TEXT("Got path: %s\n"), szPath);
}
The answer was sitting right there in front of them, like an overlooked Christmas present.
(Don’t forget, the target of the shortcut might not be a file,
in which case
the call to GetPath will return S_FALSE.)
0 comments