pau*_*ulm 3 c++ windows winapi
如果我创建一个包含"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;
}
Run Code Online (Sandbox Code Playgroud)
但为什么"<"在调用中表现得像"*" FindFirstFile?
MSDN表示只有外卡承租人在此次通话中有效(即?或*).
https://msdn.microsoft.com/en-us/library/windows/desktop/aa364418%28v=vs.85%29.aspx
编辑:
似乎是非常相关的FindFirstFile无证通配符或bug?
<是文件名中的无效字符.它是一个保留字符,如下所述:命名文件,路径和命名空间 - 命名约定.
我的猜测是,FindFirstFile简单地将所有保留字符视为通配符.也许这是一个向后兼容的原因.同样,因为<这里正式无效,并且因为行为没有记录,所以你不应该依赖它.
更新
感谢@eryksun在评论中提供了一些低级细节.实际执行搜索的低级层使用<和>作为通配符.在Win32层转换*和?到<和>通过搜索字符串上下层之前.这解释了为什么*并且<可以从高层互换.
| 归档时间: |
|
| 查看次数: |
213 次 |
| 最近记录: |