UWP-App создает файлы, не проиндексированные в Windows 10 1803 - PullRequest
0 голосов
/ 03 июля 2018

В моем приложении UWP я создаю файлы, которые должны индексироваться индексом 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 голосов
/ 06 июля 2018

Я нашел решение сам: В «LocalCache» и «LocalState» (и, возможно, также в других папках приложения) папка с именем «Indexed» автоматически добавляется в поисковый индекс Windows. Папка должна быть создана непосредственно под папкой «LocalCache» или «LocalState».

Таким образом, создав папку с именем «Indexed» и поместив в нее файлы / папки, они будут проиндексированы.

См. Рабочий код ниже (работает сейчас в Windows 10, 1709 и 1803). Я изменил только первую строку, чтобы создать папку «Indexed».

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», перейдите в «Параметры индексации». Папка «Indexed» всегда отмечена, и галочка не может быть удалена.

Источник: https://docs.microsoft.com/en-us/uwp/api/windows.storage.applicationdata.localfolder

...