在使用CFileDialog进行多文件选择时,默认情况下选择文件的个数是有限制的。有很多方法解决这个问题,大致是开辟空间,下面这个方法自己测试是OK的。但原出处不详,如有冒犯请联系本人。
//CFileDialog类设置OFN_ALLOWMULTISELECT 标志可以实现文件多选功能,但是文件的数量是有限制的,如果要突破这个限制,就必须自己提供缓冲区。例子如下:
CString fileExtensions = "jpg文件(*.jpg) |*.jpg||";
CFileDialog fileDlg(TRUE,
NULL,
NULL,
OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY,
fileExtensions);
const int MIN_FILE_NUMBER = 10; //至少允许选择10个文件
fileDlg.m_ofn.lpstrFile = new TCHAR[_MAX_PATH * MIN_FILE_NUMBER]; //重新定义缓冲区大小
memset(fileDlg.m_ofn.lpstrFile, 0, _MAX_PATH * MIN_FILE_NUMBER); //初始化定义的缓冲区
fileDlg.m_ofn.nMaxFile = _MAX_PATH * MIN_FILE_NUMBER;
if (IDOK == fileDlg.DoModal())
{
POSITION pos = fileDlg.GetStartPosition();
while (NULL != pos)
{
TRACE(fileDlg.GetNextPathName(pos)); //获取文件名
//使用文件...
}
}
delete[] fileDlg.m_ofn.lpstrFile; //最后别忘了释放内存