5

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

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

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

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

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

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

编辑 - 自己解决了这个问题:解决方案 我不能接受我自己的答案,但这是为了后代。如果其他人有更好的解决方案,请发布 - 或者随时修改我的解决方案,以便未来的搜索者可以在顶部找到它。

4

3 回答 3

4

原来编辑控件(至少在我的开发环境中)是一个组合框,所以EM_SETLIMITTEXT不合适。

相反,我GetDlgCtrl在文件打开对话框的父级上使用组合框(我在OnInitDialog处理程序中执行此操作),将其转换为CComboBox*,然后调用LimitText()以设置限制。

这也可以通过向CB_LIMITTEXT那些不与CFileDialog. 这里合适的值很可能OPENFIILENAME.nMaxFile就是传入的值。

于 2008-12-26T23:18:01.307 回答
2

在 MSDN 上命名文件或目录

在 Windows API(以下段落中讨论的一些例外情况)中,路径的最大长度为MAX_PATH,定义为 260 个字符。

即使您可以从对话框中强制使用更长的字符串,在使用针对MAX_PATH.

文档继续说:

Windows API 有许多函数也有 Unicode 版本,以允许最大总路径长度为 32,767 个字符的扩展长度路径。这种类型的路径由由反斜杠分隔的组件组成,每个组件都达到 GetVolumeInformation 函数的 lpMaximumComponentLength 参数中返回的值。要指定扩展长度的路径,请使用"\\?\"前缀。例如, "\\?\D:\<very long path>"。(此处使用的字符< >是为了清晰起见,不能作为有效路径字符串的一部分。)

于 2008-12-11T23:08:59.213 回答
0

我相信这是一个无法绕过的硬性限制。唯一重要的是当您要选择多个文件时,因为该限制足以满足最大文件名长度。

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

于 2008-12-11T23:12:37.240 回答