当用户将一个文件名拖放到应用程序图标上时,系统传递短路径名到应用的命令行。系统的这样做大概是因为它不能肯定应用程序是否能处理长路径名。奇怪的是MFC不把路径名转换为长路径。这样就使得应用程序看起来不那么专业,因为它们只能显示短版文件名。
以前我写了一段代码来转换命令行文件名为长版文件名。这次我想对这个代码进行扩展并解决原来的一个缺陷。以前的程序虽然能运行,但它只能吸取长版文件名,不是整个路径。所以我打算将它做得更通用一些,可以转换任何存在的路径名为长版路径名。
过去我使用的方法是用给定的文件名调用FindFirstFile函数,它只返回一个存在的文件或目录的长版名,而不是整个路径。下面的代码解决了这个问题,它解析每一个目录或文件名并将它转换为它们的长版路径名。
注意:在Windows的API中有一个函数GetLongPathName(...)也能做相同的事情,但是,它只能在WIN98或WINDOWS NT,WINDOW 2000及以后的版本中运行。如果你想让你的代码在所有WIN 32操作系统中运行,那你最好还是避开这个API函数为妙。
define PATH_DELIMITER \
//
BOOL MyGetLongPathName(LPTSTR lpszShortPath, LPTSTR lpszLongPath)
{
TCHAR *p, *pStart;
TCHAR buff[MAX_PATH];
WIN32_FIND_DATA wfd;
HANDLE handle;
int i;
// 初始化,保证串是“NULL”结尾
*buff =