In my attempt to capture multiple files using CFileDialog I discovered that there is a limit on the number of characters in the file name buffer. See http://support.microsoft.com/kb/179372
I have used this code to get the file names and it works fine up to the point where the buffer is full. NB: m_vcsPathnames and m_vcsFilenames are std::vector<CString> types.
Code:
// get a list of the files to process
wchar_t szFilters[]= _T("All Files (*.*)|*.*||");
// Create an Open dialog; the default file name extension "*.*"
CFileDialog fileDlg(TRUE, _T(""), _T("*.*"),
OFN_FILEMUSTEXIST| OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, szFilters, this);
m_vcsPathnames.resize(0);
m_vcsFilenames.resize(0);
if( fileDlg.DoModal ()==IDOK )
{
POSITION pos (fileDlg.GetStartPosition() );
while( pos )
{
CString csPathname( fileDlg.GetNextPathName( pos ) );
int n = csPathname.ReverseFind('\\');
CString csFilename = csPathname.Right(csPathname.GetLength() - n - 1); TRACE0("csFilename =: "); OutputDebugString(csFilename); TRACE0("\n");
m_vcsPathnames.push_back(csPathname);
m_vcsFilenames.push_back(csFilename);
}
}
I really need to be able to capture very large numbers of files. Is there any possible work around for this limitation, other than completely writing my own CFileDialogExx class ?