You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Windows搜索API始终返回英文格式的文件路径?

解决Windows索引搜索返回本地化路径的问题

问题出在你使用的System.ItemPathDisplay属性,它返回的是用户可见的本地化路径(比如德语系统里的C:\Benutzer),而非系统原生的语言无关路径。要获取不受系统语言影响的路径,只需替换Windows搜索索引中的对应属性即可。

修改后的代码

将查询语句里的System.ItemPathDisplay替换为System.ParsingPath,同时调整读取字段的逻辑:

var connection = new OleDbConnection(@"Provider=Search.CollatorDSO;Extended Properties=""Application=Windows""");

try
{
    connection.Open();
    // 替换System.ItemPathDisplay为System.ParsingPath
    var query = $"SELECT TOP 5 System.ItemName, System.ParsingPath FROM SystemIndex WHERE scope ='file:' AND System.ItemName LIKE '%{searchFile}%'";

    var command = new OleDbCommand(query, connection);

    var searchedFilesView = new SearchedFilesView();
    content = searchedFilesView;

    List<(string name, string path)> files = new List<(string name, string path)>();

    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            string fileName = reader["System.ItemName"].ToString();
            // 读取非本地化的解析路径
            string filePath = reader["System.ParsingPath"].ToString();

            files.Add((fileName, filePath));
        }
    }
}
catch (Exception ex)
{
    Debug.WriteLine($"An error occurred: {ex.Message}");
    return false;
}
finally
{
    connection.Close();
}

原理说明

System.ParsingPath是Windows搜索索引专为程序解析设计的属性,它会返回系统原生的非本地化路径(比如C:\Users),完全不受系统语言设置影响,相比手动转换路径的方式更高效、可靠。

备选手动转换方案(不推荐)

如果因特殊原因无法使用System.ParsingPath,可以通过以下方式转换本地化路径:

  • 调用PathGetShortPathNameAPI获取短路径,再转换为长路径(短路径通常是非本地化的);
  • 针对系统特殊文件夹,用Environment.GetFolderPath获取原生路径后,替换本地化路径中的对应部分。

但这种方法需要处理大量边缘情况,远不如直接使用System.ParsingPath简洁。

内容的提问来源于stack exchange,提问作者FrozenAssassine

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 13:59:28