c – 调用FindFirstFile时“<”的含义是什么?
发布时间:2020-12-16 09:56:56 所属栏目:百科 来源:网络整理
导读:参见英文答案 FindFirstFile undocumented wildcard or bug?????????????????????????????????????1个 如果我创建一个包含“Hello.txt”的目录,那么以下代码将输出“Hello.txt”: #include windows.h#include iostreamint _tmain(int argc,_TCHAR* argv[]){
参见英文答案 >
FindFirstFile undocumented wildcard or bug?????????????????????????????????????1个
如果我创建一个包含“Hello.txt”的目录,那么以下代码将输出“Hello.txt”: #include <windows.h> #include <iostream> int _tmain(int argc,_TCHAR* argv[]) { WIN32_FIND_DATA findData = {}; HANDLE hFind = ::FindFirstFile(L"<.txt",&findData); if (hFind != INVALID_HANDLE_VALUE) { std::wcout << findData.cFileName << std::endl; while (::FindNextFile(hFind,&findData)) { std::wcout << findData.cFileName << std::endl; } ::CloseHandle(hFind); } else { std::wcout << "FindFirstFile: " << ::GetLastError() << std::endl; } return 0; } 但为什么“<”在对FindFirstFile的调用中表现为“*”? MSDN表示只有外卡租船人在这次通话中有效(即?或*). https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx 编辑: 似乎是非常相关的FindFirstFile undocumented wildcard or bug? 解决方法
<是文件名中的无效字符.它是一个保留字符,如下所示:
Naming Files,Paths,and Namespaces – Naming Conventions.
我的猜测是,FindFirstFile的实现只是将所有保留字符视为通配符.也许这是一个向后兼容的原因.完全相同,因为<在这里正式无效,并且由于行为没有记录,你不应该依赖它. 更新 感谢@eryksun在评论中提供了一些低级细节.实际执行搜索的低级别层使用<和>作为外卡. Win32层翻译*和?到<和>在将搜索字符串传递给下层之前.这解释了为什么*和<从高层可以互换. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |