7

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

4

2 回答 2

5

MFC 使用大小的默认缓冲区,_MAX_PATH这就是您看到该行为的原因。查看dlgfile.cpp执行,CFileDialog::CFileDialog您将看到m_ofn.lpstrFilem_ofn.nMaxFile设置。

如果需要,您可以指定更大的缓冲区。在调用之前,DoModal您可以访问CFileDialog::m_pOFN成员以获取指向将使用的指针OPENFILENAMECFileDialog直接更新它,或者调用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 回答