You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OPENFILENAME.lpstrDefExt何时支持超过三个字符的扩展名?

OPENFILENAME结构体lpstrDefExt成员对长扩展名的支持时间

问题

OPENFILENAME结构体的lpstrDefExt成员从何时开始支持超过三个字符的扩展名?

当前Windows API文档中关于OPENFILENAME结构体的描述(笔者加粗部分):
lpstrDefExt
类型:LPCTSTR
默认扩展名。若用户未输入扩展名,GetOpenFileName和GetSaveFileName会将此扩展名追加到文件名后。该字符串可以是任意长度,但仅会追加前三个字符。字符串不应包含句点(.)。若此成员为NULL且用户未输入扩展名,则不会追加任何扩展名。此描述并不正确……

回答

其实这个文档描述确实有点滞后了。实际上,从Windows Vista开始,lpstrDefExt就已经支持超过三个字符的扩展名了——只要你在使用OPENFILENAME时设置了OFN_EXPLORER标志(这也是Vista及以后系统的默认行为)。

在Vista之前的系统(比如Windows XP)里,情况确实像文档说的那样,只会截取前三个字符追加到文件名后。但Vista引入了新的文件对话框实现,这个限制就被移除了,现在你可以指定任意长度的合法扩展名(当然还是不能包含句点),系统会完整追加它。

举个简单的例子,如果你的lpstrDefExt设为"markdown",用户输入文件名"notes",那么最终的文件名会是"notes.markdown",而不是被截断成"notes.mar"。

不过要注意,如果你刻意不使用OFN_EXPLORER标志(比如为了兼容旧的对话框样式),那还是会遵循旧的三字符限制,所以建议始终使用默认的OFN_EXPLORER模式来获得完整的长扩展名支持。

内容的提问来源于stack exchange,提问作者Heinzi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:25:33