Используя класс CFileDialog
, я выбираю несколько файлов, помещенных в каталог с длинным путем. Это нормально, когда я выбираю только один или два файла; но когда я выбираю три файла одновременно, он возвращает только часть третьего пути к файлу. (Похоже, что он может содержать до 512 символов) Как я могу это решить?Почему CFileDialog :: GetNextPathName не работает, когда путь к файлу длинный?
ответ
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
Если вы столкнулись с проблемой работы с ним, вы также можете рассмотреть возможность использования диалоговых окон [Common Item Dialogs] (http://msdn.microsoft.com/en-US/library/bb776913.aspx) вместо. API-интерфейс GetOpenFileName был устаревшим с выпуском Vista, но по-прежнему поддерживается для устаревших приложений. –
Спасибо. Ваше описание, а также ссылка работали для меня. ;) – Javid
Если предположить, что ваш код выглядит примерно так:
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();
- 1. Путь к файлу слишком длинный, чтобы удалить
- 2. WPF: слишком длинный путь к файлу хранилища
- 3. Путь к файлу слишком длинный для Windows
- 4. Путь к файлу не работает
- 5. Самый длинный путь к файлу с C#
- 6. Perl Getopt :: Длинный путь к файлу
- 7. прямой путь к файлу не работает
- 8. Путь к файлу/путь к каталогу не работает
- 9. Путь к файловому файлу не работает
- 10. PHP-путь к файлу не работает
- 11. CVCaptureFromFile не работает с CFileDialog
- 12. Excel путь к файлу не работает
- 13. Самый длинный путь к файлу в папке - как обрабатывать исключения
- 14. nodejs on heroku слишком длинный путь к файлу node_modules
- 15. Что \\ \ означает, когда предваряются путь к файлу
- 16. Путь к файлу изображения
- 17. LoadLibrary() путь к файлу
- 18. Почему путь к файлу stream_context_set_option пуст?
- 19. Путь к файлу FreeMarker
- 20. Путь к файлу не поддерживается
- 21. Python Почему путь к файлу считается каталогом
- 22. Неверный путь к файлу
- 23. Почему этот недопустимый путь к файлу с // работает?
- 24. Путь маски к файлу
- 25. Путь к файлу
- 26. Путь к файлу загрузки
- 27. Почему var_dump показывает путь к файлу?
- 28. Путь к файлу пути
- 29. QImage путь к файлу
- 30. Физический путь к файлу
ли это сделать с окна 'MAX_PATH'? – bames53
Он имеет отношение к MFC, используя буфер размером '_MAX_PATH' по умолчанию. Это можно переоценить. –