枚举 Windows 中特定类型的文件
Enumerating files of specific type in Windows
是否有本机(Windows API(方法来列出特定类型的所有文件(例如视频文件(,最好使用内置索引(Windows搜索使用的索引(?
澄清一下,我知道我可以使用基本的 FS API 递归列出所有文件并按扩展名进行过滤。我想要一种使用Windows搜索索引的更快方法。
编程语言无关紧要。如果您知道可能的解决方案,请给我一个任何语言的示例。
谢谢
我发现本教程是最有用的,因为它解释了如何获取Windows搜索API所需的DLL。
http://www.codeproject.com/Articles/21142/How-to-Use-Windows-Vista-Search-API-from-a-WPF-App
基本上,您需要安装Windows SDK。然后,您可以运行如下命令行:
c:Program Files (x86)Microsoft SDKsWindowsv7.0ABin>tlbimp "c:Program Files (x86)Microsoft SDKsWindowsv7.0ALibSearchAPI.tlb"
生成所需的 DLL。在项目中包括该 DLL。然后,在 c# 中添加:
using SearchAPILib;
到你的代码。
从那里,我为搜索结果创建了一个简单的对象:
public class Result
{
public string Name { get; set; }
public string Ext { get; set; }
public string Path { get; set; }
public Result()
{
this.Name = string.Empty;
this.Ext = string.Empty;
this.Path = string.Empty;
}
}
并使用此代码进行查询。
public ActionResult Index(string q = "default")
{
var Results = new List<Result>();
var cManager = new CSearchManager();
ISearchQueryHelper cHelper = cManager.GetCatalog("SYSTEMINDEX").GetQueryHelper();
cHelper.QuerySelectColumns = ""System.ItemNameDisplay","System.FileExtension","System.ItemFolderPathDisplay"";
cHelper.QueryMaxResults = 50;
using (var cConnnection = new OleDbConnection(cHelper.ConnectionString))
{
cConnnection.Open();
using (var cmd = new OleDbCommand(cHelper.GenerateSQLFromUserQuery(q), cConnnection))
{
if (cConnnection.State == System.Data.ConnectionState.Open)
{
using (var reader = cmd.ExecuteReader())
{
Results.Clear();
while (!reader.IsClosed && reader.Read())
{
Results.Add(new Result() { Name = reader[0].ToString(), Ext = reader[1].ToString(), Path = reader[2].ToString() });
}
reader.Close();
}
}
}
cConnnection.Close();
}
ViewBag.Results = Results;
return View();
}
并使用标准 Razor 视图输出它:
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Index</title>
</head>
<body>
<div>
<ul>
@{foreach(var item in ViewBag.Results){
<li>Name: <b>@item.Name</b><br />
Ext: <b>@item.Ext</b><br />
Path: <b>@item.Path</b>
</li>
}
}
</ul>
</div>
</body>
</html>
示例查询可能是:啤酒和种类:图片
有关查询语言的详细信息:http://msdn.microsoft.com/en-us/library/aa965711(v=vs.85(.aspx
正如其他人提到的,请使用Windows搜索SDK。
从此页面下载示例 DSearch: http://archive.msdn.microsoft.com/windowssearch并传入类型:视频作为用户查询。
相关文章:
- avrogencpp能为模式中的每种类型生成单独的头文件吗
- 我有两个类需要在同一 cpp 文件中相互引用,但第一个类无法识别第二个类类型的对象
- 如何从文本文件中读取数值,直到遇到字符类型?
- 如何将文本文件的特定行读取到 int 类型的数组中C++?
- 给定一个C++嵌套的私有结构类型,是否有从文件范围静态函数访问它的策略
- 使用 Boost.Spirit 解析具有混合数据类型的 OBJ 文件?
- 通过C++从目录中过滤特定文件类型
- C++模板编程设计问题 - 根据输入文件返回不同的类型
- C2011: 'Card':"类"类型重新定义(尽管使用了包含保护并且没有在文件中重新定义.cpp类)
- std::ifstream 在读取文件中最后一项时设置 eofbit,但仅在读取数值类型时发生
- 将类型保存到文件
- 我的头文件 DNode 中的我的数据类型未被识别为数据类型
- 当前不会命中断点。没有调试器目标代码类型的可执行代码与此文件关联
- Ini 文件类型名称 预期C++
- 用于随机数据访问的最有效文件类型
- Visual Studio 2019 - 设置文件类型的默认扩展名
- 如何在CTreeCtrl中获取所选项目的文件类型?文件扩展名可能被隐藏,因此 GetItemText 没有帮助
- 设计跨平台多内容类型文件格式的最佳方法
- 只计算*.cpp和*.h类型文件中的行数
- 当构造函数具有相同的参数类型(文件路径)时,如何从数组创建(初始化)std::元组