0

我正在使用 CFileDialog 打开文件,我允许多项选择,当用户选择多个文件时,我使用 CFileDialog::GetNextPathName 方法对它们进行迭代,但是如果文件名太大,它会返回它被截断我不知道为什么那??

这些文件是使用随机名称生成的,并且文件已成功创建,但是当我尝试使用 CFileDialog 打开它们时,其中一些文件太长了

"dFR.45434$#%@#3$FDGH.reR'FGDF,jh'+=gh.fghj&^%$!()rthyfgf.gfdhdfAZXCNMNrtyuIUU;k][sdgf]fd(jk~-.ggfddFR.45434$#%@#3$FDGH.reR'FGDF,jh'+=gh.fghj&^%$!()rthyfgf.gfdhdfAZXCNMNrtyuIUU;k][sdgf]fd(jk~-.ggfddFR.45434$#%@#3$FDGH.reR'FGDF,jh'+=gh.fghj&^%$!()rthyfgf"

CFileDialog::GetNextPathName 方法从它的末尾返回一些丢失的字符。我不知道是什么问题!我确定文件的完整路径的长度小于 MAX_PATH

解决方案


我认为缓冲区将包含一个一个接一个的文件名,调用 get next 将用下一个填充它,但我发现所有文件路径都连接起来,用 ' ' 或 '\0' 分隔,具体取决于以下使用的一些标志我很好

CFileDialog fd;
UINT maxFiles = 50;
UINT buffSize = maxFiles*(MAX_PATH + 1) +1;
CString buffer;
fd.GetOFN().lpstrFile = buffer.GetBuffer(buffSize);
fd.GetOFN().nMaxFile = buffSize;

if(fd.DoModal() == IDOK)
{
    //get start position using GetStartPosition , iterate over files using GetNextPathName
}
buffer.ReleaseBuffer();
4

0 回答 0