首页 > 解决方案 > Is it possible to use quotation marks for FindFirstFile() function?

问题描述

I try to return a specific .xls file with FindFirstFile(). Howerver it also returns .xlsx, due to naming convention. It is possible to use "*.xls" in the file explorer to return only .xls files. Does this work for the functi

标签: c++winapi

解决方案


正如@Hans Passant 所说,您被对8.3 MSDOS 名称的传统支持所困扰。

LovelyTable.xlsx也有一个次要名字,比如LOVELY~1.XLS这个第二个名字就是FindFirstFile()/FindNextFile()给你的。避免此类结果的唯一可靠方法是重新检查返回给您的内容。

如果您不想更改应用程序,您还可以从卷中删除短名称并禁用它们的生成。您可以检查fsutil命令(其8dot3name子命令),但请注意,即使在今天,这也可能会破坏某些软件。(例如认为它安装在 下的软件C:\PROGRA~2\


我认为 FindFirstFileEx()可以过滤掉 8.3 的名称:

FindFirstFileEx(searchPattern, FindExInfoBasic, ...)

但它不能。感谢@RbMm 将其清除。FindExInfoBasic只避免填写WIN32_FIND_DATA'cAlternateFileName字段。您仍然会收到通过短名称发现的文件。


推荐阅读