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