增加 GetOpenFileName 文件选择对话框的文件名字段中的字符数
Posted
技术标签:
【中文标题】增加 GetOpenFileName 文件选择对话框的文件名字段中的字符数【英文标题】:Increase number of characters in filename field of GetOpenFileName file selection dialog 【发布时间】:2008-12-11 23:05:24 【问题描述】:我们的应用程序允许在通过 GetOpenFileName 函数显示的文件选择对话框中选择多个文件(这个问题也适用于使用 CFileDialog 等的人...)
可以在文件名字段中输入的字符数似乎是有限的(259 似乎是一个神奇的数字 - 不知道为什么)。
我们已尝试更改OPENFILENAME 结构的以下成员:
lpstrFile - 指向我们自己的缓冲区,大小为 4K 字节 nMaxFile - 设置为 lpstrFile 的大小(我们正在编译 ANSI,所以这实际上是 4000
但这些值似乎不会增加对话框中文件名字段的输入宽度。
我将尝试向控件发送 EM_SETLIMITTEXT 消息,但想知道其他人是否有解决方案。
编辑 - 自己解决了这个问题:solution 我不能接受我自己的答案,但这是为了后代。如果其他人有更好的解决方案,请发布 - 或者随时修改我的解决方案,以便未来的搜索者可以在顶部找到它。
【问题讨论】:
【参考方案1】:原来编辑控件(至少在我的开发环境中)是一个组合框,所以EM_SETLIMITTEXT
不合适。
相反,我在文件打开对话框的父级上使用GetDlgCtrl
跟踪组合框(我在OnInitDialog
处理程序中执行此操作),将其转换为CComboBox*
,然后调用LimitText()
来设置限制。
这也可以通过向控件发送CB_LIMITTEXT
消息来完成,供那些不使用CFileDialog
的人使用。这里的适当值很可能是传入的OPENFIILENAME.nMaxFile
值。
【讨论】:
【参考方案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>"
。 (这 字符<
>
在这里用于 视觉清晰度,不能成为 有效的路径字符串。)
【讨论】:
请注意,我正在从对话框中检索多个路径 - 每个路径可能与 MAX_PATH 一样长,但对话框可能返回其中的 10 或 15 个。【参考方案3】:我相信这是一个无法绕过的硬性限制。唯一重要的是当您要选择多个文件时,因为该限制足以满足最大文件名长度。
我在这些对话框中添加了一个“所有文件”按钮,用于打开文件夹中的所有文件;这是我找到的唯一解决方法。
【讨论】:
啊——在 win32 的世界里永远不要说“从不”:-) 通常我不会说“从不”,但我花了很多时间。 非常酷,谢谢!我为此苦苦挣扎的工作早已不复存在,但下次我会记住它。以上是关于增加 GetOpenFileName 文件选择对话框的文件名字段中的字符数的主要内容,如果未能解决你的问题,请参考以下文章