С помощью CFileDialog
класс, я выбираю несколько файлов, помещенных в каталог с длинным путем. Это нормально, когда я выбираю только один или два файла; но когда я выбираю три файла одновременно, он возвращает только часть третьего пути к файлу. (Похоже, он ограничен 512 символами) Как я могу решить эту проблему?
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
Предполагая, что ваш код выглядит примерно так:
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();