findexexecutable在c++中截断文件名

FindExecutable truncates file name in C++

本文关键字:文件名 c++ findexexecutable      更新时间:2023-10-16

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:testtestTEST12~1.EXE,但应该是c:testtestTEST12345.EXE

是否有办法获得正确的名称?

是的,FindExecutable给了你一个"短"路径名:它是一个路径名,其中所有文件夹和文件名被构造为8个字符(加上扩展名),使用时髦的DOS语法(~1的东西)。

在这里阅读更多关于路径名的信息:命名文件、路径和命名空间

长话短说,你必须在"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);