使用CFileDialog
类,我选择放置在具有长路径的目录中的多个文件。只选择一两个文件就可以了;但是当我同时选择三个文件时,它只返回第三个文件路径的一部分。(看起来可能限制为 512 个字符)我该如何解决这个问题?
问问题
2153 次
2 回答
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
于 2013-02-15T21:31:29.610 回答
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();
于 2016-11-22T17:50:43.997 回答