FindExecutable在C ++中截断文件名

时间:2015-10-08 15:32:27

标签: c++ winapi mfc

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
    );

szExec:\test\test\TEST12~1.EXE,但应为c:\test\test\TEST12345.EXE

有没有办法找到正确的名字?

1 个答案:

答案 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);