增加GetOpenFileName文件选择对话框的文件名字段中的字符数

时间:2008-12-11 23:05:25

标签: winapi visual-c++ openfiledialog

我们的应用程序允许在文件选择对话框中选择多个文件,该对话框通过GetOpenFileName函数显示(此问题也适用于使用CFileDialog等的人...)

对于可以在文件名字段中输入的字符数量似乎有限制(259似乎是一个神奇的数字 - 不知道为什么)。

我们尝试更改OPENFILENAME结构的以下成员:

lpstrFile - 指向我们自己的缓冲区,大小为4K字节 nMaxFile - 设置为lpstrFile的大小(我们正在编译ANSI,所以这实际上是4000

但是这些值似乎不会增加对话框中文件名字段的输入宽度。

我将尝试向控件发送EM_SETLIMITTEXT消息,但想知道其他人是否有解决方案。

编辑 - 我自己解决了这个问题:solution我不能接受我自己的回答,但这里是后人的。如果其他人有更好的解决方案,请发布 - 或者随时修改我的解决方案,以便将来的搜索者能够找到最佳解决方案。

3 个答案:

答案 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)

我认为这是一个无法绕过的硬限制。唯一重要的是当你想要选择多个文件时,因为这个限制对于最大文件名长度是足够的。

我在这些对话框中添加了“所有文件”按钮,用于打开文件夹中的所有文件;这是我找到的唯一解决方法。