查找第一个文件W通配符匹配
FindFirstFileW wildcard match
考虑一个独立示例,其中我使用通配符查询目录中的所有名称:
#include <Windows.h>
#include <fstream>
void add_file(const std::string &path)
{
std::ofstream ofs(path,std::ofstream::out);
ofs.close();
}
void foo(const std::wstring& szDir)
{
std::cout << "f1 : FindFirstFileWn";
WIN32_FIND_DATAW ffd;
HANDLE hFind = INVALID_HANDLE_VALUE;
hFind = FindFirstFileW(szDir.c_str(), &ffd);
if (INVALID_HANDLE_VALUE == hFind)
{
std::cout << "Error in FindFirstFileW : " << GetLastError() << std::endl;
return;
}
// List all the files in the directory with some info about them.
do
{
std::wcout <<"Long file name " << " " << ffd.cFileName << std::endl;
std::wcout <<"Short file name " << " " << ffd.cAlternateFileName << std::endl;
}
while (FindNextFileW(hFind, &ffd) != 0);
FindClose(hFind);
}
int main()
{
const char odd_filename[] = {static_cast<char>(0xC4U), '.', 't', 'x', 't', 0};
add_file("C:\mydir1\777.Txt");
add_file(std::string("C:\mydir1\") + std::string(odd_filename));
foo(L"C:\mydir1\7*");
return 0;
}
这给了我如下输出
f1 : 查找第一个文件W长文件名 777.Txt短文件名长文件名 ─.txt短文件名 7F7E~1.TXT
为什么FindFirstFileW
返回第二个文件名Ä.txt
作为匹配项?
通配符匹配适用于长文件名和短文件名。第二个文件的短名称为 7F7E~1.TXT
,因此与 7*
匹配。
文档是这样介绍的:
以下列表标识了一些其他搜索特征:
- 搜索严格基于文件名执行,而不是基于日期或文件类型等任何属性(有关其他选项,请参阅
FindFirstFileEx
(。- 搜索包括长文件名和短文件名。
- 尝试使用尾随反斜杠打开搜索总是失败。
- 为 lpFileName 参数传递无效字符串、NULL 或空字符串不是此函数的有效用法。在这种情况下的结果 未定义。
第二个要点是相关的
相关文章:
- 表示"accepting anything for this template argument" C++概念的通配符
- 当使用通配符和null指针调用函数时,对输出的说明
- C++17 文件系统::remove_all 带有通配符路径
- 如何允许通配符模板参数
- 使用通配符的跨平台文件列表
- 如何检索由带通配符的字符串索引的对象
- 有效地查找通配符条目
- 具有不同输入和输出名称的生成文件通配符
- MinGW GCC通配符编译所有文件(Windows)
- Windows 上带有通配符的目录中的文件
- 查找第一个文件W通配符匹配
- 在某些情况下,通配符模式匹配失败
- 实现通配符后没有输入文件错误
- 如何为文件对话框过滤器设置通配符
- 使用通配符搜索QTableWidget时出现问题
- 为什么 std::experimental::filesystem::p ath 不接受像 "*" 这样的通配符?
- 在三元搜索树中搜索(NOT with)通配符
- SQLite如何在列上使用LIKE并添加通配符
- 如何在C++的目录中查找具有通配符匹配的最后一个修改文件
- 计算与通配符匹配的下一个最近日期时间