Увеличить количество символов в поле имени файла в диалоговом окне выбора файла GetOpenFileName - PullRequest
5 голосов
/ 12 декабря 2008

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

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

Мы попытались изменить следующие элементы структуры OPENFILENAME :

lpstrFile - указывает на наш собственный буфер размером 4K байт nMaxFile - установить размер lpstrFile (мы компилируем ANSI, так что это эффективно 4000

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

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

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

Ответы [ 3 ]

4 голосов
/ 27 декабря 2008

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

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

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

2 голосов
/ 12 декабря 2008

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

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

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

В документах говорится:

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

0 голосов
/ 12 декабря 2008

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

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

...