Увеличьте количество символов в поле имени файла в диалоговом окне выбора файла GetOpenFileName.

StackOverflow https://stackoverflow.com/questions/361350

Вопрос

Наше приложение позволяет выбирать несколько файлов в диалоговом окне выбора файлов, которое отображается с помощью функции GetOpenFileName (этот вопрос также относится к людям, использующим CFileDialog и т. д.).

Кажется, существует ограничение на количество символов, которые можно ввести в поле имени файла (259, похоже, является магическим числом - не знаю почему).

Мы попытались изменить следующих членов ОТКРЫТОЕИМЯФАЙЛА состав:

LPStrfile - укажите на наш собственный буфер, размером с 4K Bytes nmaxfile - устанавливается размером с LPStrfile (мы компилируем ANSI, так что это фактически 4000

Но эти значения, похоже, не увеличивают ширину ввода поля имени файла в диалоговом окне.

Я собираюсь поэкспериментировать с отправкой сообщения EM_SETLIMITTEXT элементу управления, но хотел узнать, есть ли у кого-нибудь еще решение.

РЕДАКТИРОВАТЬ - решил это сам: решение Я не могу принять свой собственный ответ, но вот он для потомков.Если у кого-то есть лучшее решение, пожалуйста, опубликуйте его или не стесняйтесь модифицировать мое решение, чтобы будущие поисковые пользователи могли найти его вверху.

Это было полезно?

Решение

Оказывается, элемент управления редактированием (по крайней мере, в моей среде разработки) представляет собой поле со списком, поэтому EM_SETLIMITTEXT не подходит.

Вместо этого я отследил поле со списком, используя GetDlgCtrl в родительском диалоговом окне открытия файла (я делаю это в OnInitDialog обработчик), приведите его к CComboBox*, тогда позвони LimitText() чтобы установить лимит.

Это также можно сделать, отправив CB_LIMITTEXT сообщение в контрольную для тех из вас, кто не работает с CFileDialog.Подходящим значением здесь, скорее всего, будет OPENFIILENAME.nMaxFile значение, которое передается.

Другие советы

От Именование файла или каталога в MSDN:

В Windows API (за некоторыми исключениями, обсуждаемыми в следующих параграфах) максимальная длина пути равна MAX_PATH, который определяется как 260 символов.

Даже если бы вы могли вывести более длинные строки из диалога, вы можете столкнуться с проблемами в дальнейшем при использовании API, которые были закодированы для MAX_PATH.

Документы продолжают говорить:

API Windows имеет много функций, которые также имеют версии Unicode, чтобы обеспечить длину расширенной длины для максимальной общей длины пути 32 767 символов.Этот тип пути состоит из компонентов, разделенных обратными хлеками, каждый из которых до значения, возвращаемого в параметре LPMaximumPonentLength функции getVolumeInformation.Чтобы указать путь расширенной длины, используйте "\\?\" префикс.Например, "\\?\D:\<very long path>".(Персонажи < > используются здесь для визуальной ясности и не могут быть частью действительной строки пути.)

Я считаю, что это жесткий предел, который невозможно обойти.Единственный раз, когда это имеет значение, — это когда вы хотите выбрать более одного файла, поскольку ограничения достаточно для максимальной длины имени файла.

Я добавил в эти диалоговые окна кнопку «Все файлы» для открытия всех файлов в папке;это единственный обходной путь, который я нашел.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top