FindExecutable
在结果缓冲区中返回截断的文件名。是因为文件名超过8个字符?
代码:
strPath = "test12345.exe";
CString strDiraa = "c:\\test\\test";
TCHAR szExe[1024];
::FindExecutable(
strFile, // pointer to filename
strDir.IsEmpty() ? 0 : LPCTSTR(strDir), // pointer to default directory
szExe // result-buffer
);
szExe
为c:\test\test\TEST12~1.EXE
,但应为c:\test\test\TEST12345.EXE
。
有没有办法找到正确的名字?
答案 0 :(得分:0)
是的,FindExecutable
为您提供了一个"短片"路径名:它是一个路径名,其中所有文件夹和文件名都使用那个时髦的DOS语法(~1
东西)分成8个字符(加上扩展名)。
在此处详细了解路径名称:Naming Files, Paths, and Namespaces
长话短说,你必须在" DOSified"上使用GetFullPathName。获取完整文件路径的路径名:
TCHAR szExe[1024];
::FindExecutable(
strFile, // pointer to filename
strDir.IsEmpty() ? 0 : LPCTSTR(strDir), // pointer to default directory
szExe // result-buffer
);
TCHAR fullPathName[1024];
GetFullPathName(szExe, sizeof(fullPathName), fullPathName, 0);