使用CFileDialog
类,我选择放置在具有长路径的目录中的多个文件。当我只选择一个或两个文件时,它没关系;但是当我同时选择三个文件时,它只返回第三个文件路径的一部分。 (看起来它可能限制为512个字符)我该如何解决这个问题?
答案 0 :(得分:5)
MFC使用大小为_MAX_PATH
的默认缓冲区,这就是您看到该行为的原因。请dlgfile.cpp
查看CFileDialog::CFileDialog
的实施情况,您会看到m_ofn.lpstrFile
和m_ofn.nMaxFile
已设置。
如果需要,您可以指定更大的缓冲区。在致电DoModal
之前,您可以访问CFileDialog::m_pOFN
成员以获取指向OPENFILENAME
将使用的CFileDialog
的指针并直接更新或致电CFileDialog::GetOFN
得到对结构的引用并更新它。
无论哪种方式,您都会发现这有用:http://msdn.microsoft.com/en-US/library/ms646839(v=vs.80).aspx
答案 1 :(得分:0)
假设你的代码看起来像这样:
CFileDialog dialog(...);
dialog.DoModal();
确定您希望支持的最大文件数,例如:
#define MAX_FILE_NAMES 256
在致电DoModal
之前添加此内容:
CString data;
dialog.m_pOFN->nMaxFile = (MAX_FILE_NAMES*(MAX_PATH+1))+1;
dialog.m_pOFN->lpstrFile = data.GetBuffer((MAX_FILE_NAMES*(MAX_PATH+1))+1);
在致电DoModal
后添加此内容:
data.ReleaseBuffer();