为什么CFileDialog :: GetNextPathName在文件路径很长时不起作用?

时间:2013-02-15 21:20:36

标签: c++ winapi mfc path cfiledialog

使用CFileDialog类,我选择放置在具有长路径的目录中的多个文件。当我只选择一个或两个文件时,它没关系;但是当我同时选择三个文件时,它只返回第三个文件路径的一部分。 (看起来它可能限制为512个字符)我该如何解决这个问题?

2 个答案:

答案 0 :(得分:5)

MFC使用大小为_MAX_PATH的默认缓冲区,这就是您看到该行为的原因。请dlgfile.cpp查看CFileDialog::CFileDialog的实施情况,您会看到m_ofn.lpstrFilem_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();