Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 枚举Windows中特定类型的文件_C#_C++_.net_Windows_Winapi - Fatal编程技术网

C# 枚举Windows中特定类型的文件

C# 枚举Windows中特定类型的文件,c#,c++,.net,windows,winapi,C#,C++,.net,Windows,Winapi,是否有本机(Windows API)方法列出特定类型的所有文件(例如视频文件),最好使用内置索引(Windows Search使用的索引) 我只想澄清一下,我知道我可以使用基本的FS API递归地列出所有文件并按扩展名过滤。我想要一个使用Windows搜索索引的更快的方法 编程语言并不重要。如果你知道一个可能的解决方案,请用任何语言给我举个例子 感谢大家使用Windows Search SDK 从本页下载示例数据搜索: 然后输入:video作为userQuery。我发现本教程最有用,因为它解释了

是否有本机(Windows API)方法列出特定类型的所有文件(例如视频文件),最好使用内置索引(Windows Search使用的索引)

我只想澄清一下,我知道我可以使用基本的FS API递归地列出所有文件并按扩展名过滤。我想要一个使用Windows搜索索引的更快的方法

编程语言并不重要。如果你知道一个可能的解决方案,请用任何语言给我举个例子


感谢大家使用Windows Search SDK

从本页下载示例数据搜索:
然后输入:video作为userQuery。

我发现本教程最有用,因为它解释了如何获取Windows Search API所需的DLL

基本上,您需要安装Windows SDK。然后可以运行如下命令行:

c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin>tlbimp "c:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Lib\SearchAPI.tlb"
生成所需的DLL。在项目中包含该DLL。然后,在c#中添加:

到您的代码

从那里,我为搜索结果创建了一个简单的对象:

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();
}
公共操作结果索引(字符串q=“默认”) { var Results=新列表(); var cManager=new CSearchManager(); ISearchQueryHelper cHelper=cManager.GetCatalog(“系统索引”).GetQueryHelper(); cHelper.QuerySelectColumns=“\”System.ItemNameDisplay\”、\“System.FileExtension\”、\“System.ItemFolderPathDisplay\”; cHelper.QueryMaxResults=50; 使用(var cConnection=新的OLEDB连接(cHelper.ConnectionString)) { cConnection.Open(); 使用(var cmd=new OleDbCommand(cHelper.GenerateSQLFromUserQuery(q),cconnection)) { if(CConConnection.State==System.Data.ConnectionState.Open) { 使用(var reader=cmd.ExecuteReader()) { 结果:清晰(); 而(!reader.IsClosed&&reader.Read()) { 添加(新结果(){Name=reader[0].ToString(),Ext=reader[1].ToString(),Path=reader[2].ToString()}); } reader.Close(); } } } cconnection.Close(); } ViewBag.Results=结果; 返回视图(); } 并使用标准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>
@{
布局=空;
}
指数
    @{foreach(ViewBag.Results中的变量项){
  • 名称:@item.Name
    分机:@item.Ext
    路径:@item.Path
  • } }
一个示例查询可能是:beer和kind:pics


有关查询语言的更多信息:

Windows Search SDK,请参阅此处的答案:Windows Search索引新文件(例如刚从摄像头上载)需要多长时间?
@{
    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>