Мы используем подход GetFiles из этого вопроса следующим образом:
var pipePrefix = "Test_";
Directory.GetFiles("\\.\pipe\", pipePrefix + "*");
И мы ищем каналы типа "Test_1", "Test_2", "Test_3". Мы знаем, что это приложение имеет некоторые проблемы , но мы не смогли найти объяснение нашего поведения.
До сих пор мы тестировали его на трех машинах с Windows 10 и одной с Windows 7. Вкл. В Windows 10 все работает как положено (насколько мы можем судить). Мы находим все трубы каждый раз. На машине с Windows 7 у нас есть некоторые проблемы:
С кодом выше мы не находим никаких каналов вообще. Но если мы будем искать по
Directory.GetFiles("\\.\pipe\", "*");
, мы найдем все трубы, но у нас будет еще один шаг, чтобы выбрать наши трубы. И мы попробовали еще несколько запросов:
Directory.GetFiles("\\.\pipe\", "*"); //We find our pipes
Directory.GetFiles("\\.\pipe\", "T" + "*"); //We find our pipes
Directory.GetFiles("\\.\pipe\", "Te" + "*"); //We don't find our pipes
Directory.GetFiles("\\.\pipe\", "Tes" + "*"); //We don't find our pipes
Directory.GetFiles("\\.\pipe\", "Test" + "*"); //We don't find our pipes
Directory.GetFiles("\\.\pipe\", "Test_" + "*"); //We don't find our pipes
Мы не находим никаких скрытых символов и не выдается никаких исключений.
Пока мы не знаем, является ли проблема Windows 7.
Обновление 07.11.19: Мы установили новый Windows 7 и новый компьютер с Windows 10 и попробовали несколько букв не только T. В Windows 7 мы иногда находим каналы с одной буквой, например Tили U и иногда с двумя, например, Te или Ug. Но мы всегда находим каналы в Windows 10. Мы , а не настраивали наше программное обеспечение на этих машинах, мы просто искали существующие каналы с помощью консольного приложения. Так что с нашей точки зрения это выглядит так, как будто это проблема в Windows 7, а не в нашем приложении.
Поэтому мой вопрос не в том, как мы можем обойти эту проблему. Я уверен, что мы могли бы использовать другой шаблон и фильтр впоследствии или использовать совершенно другой подход, который не основан на GetFiles / EnumerateFiles (лучший вариант, я думаю). Мой вопрос:
Почему поведение отличается в зависимости от ввода и, возможно, также от ОС?