Неправильный язык пути из API поиска Windows

У меня есть следующий код для поиска в индексе Windows определенных файлов. В результате я получаю список файлов с именем файла и путем. Проблема в том, что у меня немецкая система, и путь, который возвращает поиск, имеет немецкий формат. Например: в качестве пути я получаю «C:\Benutzer» вместо «C:\Users». Таким образом, путь не зависит от языка. Затем я хочу использовать путь, чтобы открыть проводник в том месте, которое я получил в результате поиска. Но когда я запускаю проводник с немецким путем в качестве аргумента, он всегда открывает папку «Документы». Итак, есть ли способ всегда получать английский путь из поиска:

Вот мой код:

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

try
{
    connection.Open();
    var query = $"SELECT TOP 5 System.ItemName, System.ItemPathDisplay 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.ItemPathDisplay"].ToString();

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

Каждое свойство, в названии которого содержится термин «Отображение», локализовано. System.ItemName нет, и это настоящее имя файловой системы. Теоретически мы должны иметь возможность использовать System.ParsingPath, но он не отображается таким образом, поэтому вы можете использовать path вместо System.ItemPathDisplay (он будет иметь формат URI, например: file://...). Другие сочетания клавиш: filename, write, access, create, attrib.

Simon Mourier 06.04.2024 10:49
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
1
54
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы решить проблему языково-зависимых путей в результатах поиска, вы можете использовать свойство System.ItemUrl вместо System.ItemPathDisplay. Свойство System.ItemUrl предоставляет URL-адрес, который должен быть независимым от языка и может использоваться для открытия местоположения файла в проводнике Windows.

Вот как вы можете изменить свой код для использования System.ItemUrl:

var connection = new OleDbConnection(@"Provider=Search.CollatorDSO;Extended Properties = ""Application=Windows""");
try
{
    connection.Open();
    var query = $"SELECT TOP 5 System.ItemName, System.ItemUrl 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 url)> files = new List<(string name, string url)>();
    using (var reader = command.ExecuteReader())
    {
        while (reader.Read())
        {
            string fileName = reader["System.ItemName"].ToString();
            string fileUrl = reader["System.ItemUrl"].ToString();
            files.Add((fileName, fileUrl));
        }
    }
}
catch (Exception ex)
{
    Debug.WriteLine($"An error occurred: {ex.Message}");
    return false;
}
finally
{
    connection.Close();
}

Другие вопросы по теме