UWP-App创建的文件未在Windows 10 1803中建立索引

时间:2018-07-03 16:10:55

标签: c# windows uwp full-text-indexing

在我的UWP App中,我正在创建应由Windows索引编制索引的文件,以便以后可以使用全文本搜索找到它们。

public async Task TestFullTextSearch()
{
   StorageFolder folder = ApplicationData.Current.LocalCacheFolder;
   CreateFile(folder.Path + Path.DirectorySeparatorChar + "myDocument.txt", "Some text 123");
   await Task.Delay(5000); // to ensure that the file is already index before querying
   int numberOfResults = await SearchForResults(folder, "*");
   // numberOfResults is 1 in Windows 10, 1709 and 0 in 1803
}

public void CreateFile(string path, string text)
{
    using (StreamWriter sw = File.CreateText(path))
    {
        sw.WriteLine(text);
    }
}

private async Task<int> SearchForResults(StorageFolder folder, string searchString)
{
    QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderBySearchRank, new List<string>() { "*" });
    queryOptions.UserSearchFilter = searchString;
    StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions);
    IReadOnlyList<StorageFile> files = await queryResult.GetFilesAsync();
    return files.Count;
}

在上面的示例中,在Windows 10 1709下执行代码时,numberOfResults为1。在Windows 10 1803中执行相同代码时,numberOfResults为0。

在两种情况下,该位置都会添加到Windows索引(通过“索引选项”添加)。

我检查了权限,它们似乎完全一样。我还尝试在相应的文件夹中手动创建文件,并使用Windows资源管理器的Windows搜索,它显示0个结果(在1803下,在1709下,结果按预期显示)。在某些情况下,创建的文件最终出现在查询中并且可以搜索,我不知道为什么。

我在3台不同的Windows 10、1803计算机上进行了尝试,结果完全相同(在几台1709计算机上,效果很好)。

1 个答案:

答案 0 :(得分:1)

我自己找到了解决方案: 在“ LocalCache”和“ LocalState”(可能还有其他应用程序文件夹)内,名为“ Indexed”的文件夹会自动添加到Windows搜索索引中。该文件夹必须直接在“ LocalCache”或“ LocalState”文件夹下创建。

因此,通过创建一个名为“ Indexed”的文件夹并将文件/文件夹放入该文件夹,文件将被索引。

请参阅下面的工作代码(在Windows 10、1709和1803中现在可以使用)。我只更改了第一行以创建“索引”文件夹。

public async Task TestFullTextSearch()
{
    StorageFolder folder = await ApplicationData.Current.LocalCacheFolder.CreateFolderAsync("Indexed", CreationCollisionOption.OpenIfExists);
    CreateFile(folder.Path + Path.DirectorySeparatorChar + "myDocument.txt", "Some text 123");
    await Task.Delay(5000); // to ensure that the file is already index before querying
    int numberOfResults = await SearchForResults(folder, "*");
    // numberOfResults is 1 in Windows 10, 1709 and 1 in 1803
}

public void CreateFile(string path, string text)
{
    using (StreamWriter sw = File.CreateText(path))
    {
        sw.WriteLine(text);
    }
}

private async Task<int> SearchForResults(StorageFolder folder, string searchString)
{
    QueryOptions queryOptions = new QueryOptions(CommonFileQuery.OrderBySearchRank, new List<string>() { "*" });
    queryOptions.UserSearchFilter = searchString;
    StorageFileQueryResult queryResult = folder.CreateFileQueryWithOptions(queryOptions);
    IReadOnlyList<StorageFile> files = await queryResult.GetFilesAsync();
    return files.Count;
}

要检查“ Indexed”文件夹是否真正被索引,请转到“索引选项”。始终选中“索引”文件夹,并且不能删除复选标记。

来源:https://docs.microsoft.com/en-us/uwp/api/windows.storage.applicationdata.localfolder