我们的应用程序允许在文件选择对话框中选择多个文件,该对话框通过GetOpenFileName函数显示(此问题也适用于使用CFileDialog等的人...)
对于可以在文件名字段中输入的字符数量似乎有限制(259似乎是一个神奇的数字 - 不知道为什么)。
我们尝试更改OPENFILENAME结构的以下成员:
lpstrFile - 指向我们自己的缓冲区,大小为4K字节 nMaxFile - 设置为lpstrFile的大小(我们正在编译ANSI,所以这实际上是4000
但是这些值似乎不会增加对话框中文件名字段的输入宽度。
我将尝试向控件发送EM_SETLIMITTEXT消息,但想知道其他人是否有解决方案。
编辑 - 我自己解决了这个问题:solution我不能接受我自己的回答,但这里是后人的。如果其他人有更好的解决方案,请发布 - 或者随时修改我的解决方案,以便将来的搜索者能够找到最佳解决方案。
答案 0 :(得分:4)
原来,编辑控件(至少在我的开发环境中)是一个组合框,因此EM_SETLIMITTEXT
不合适。
相反,我在文件打开对话框的父级(我在GetDlgCtrl
处理程序中执行此操作)中使用OnInitDialog
跟踪组合框,将其强制转换为CComboBox*
,然后调用LimitText()
设置限制。
也可以通过向不使用CB_LIMITTEXT
的人发送CFileDialog
消息来完成此操作。这里适当的值很可能是传入的OPENFIILENAME.nMaxFile
值。
答案 1 :(得分:2)
来自Naming a File or Directory on MSDN:
在Windows API中(以下段落中讨论了一些例外),路径的最大长度为
MAX_PATH
,定义为260个字符。
即使您可以从对话框中强制使用更长的字符串,但在使用已针对MAX_PATH
编码的API时,您可能会遇到麻烦。
文档继续说:
Windows API具有许多功能 也有Unicode版本 允许延长路径 最大总路径长度为32,767 字符。这种类型的路径是 由分隔的组件组成 反斜杠,每个都达到值 回来了 lpMaximumComponentLength参数 GetVolumeInformation函数。至 指定一个扩展长度路径,使用
"\\?\"
前缀。例如,"\\?\D:\<very long path>"
。 (该 此处使用字符<
>
视觉清晰度不能成为一部分 有效的路径字符串。)
答案 2 :(得分:0)
我认为这是一个无法绕过的硬限制。唯一重要的是当你想要选择多个文件时,因为这个限制对于最大文件名长度是足够的。
我在这些对话框中添加了“所有文件”按钮,用于打开文件夹中的所有文件;这是我找到的唯一解决方法。