Мы используем подход GetFiles из этого вопроса следующим образом:
var pipePrefix = "Test_";
Directory.GetFiles("\\.\pipe\", pipePrefix + "*");
И ищем пайпы типа «Тест_1», «Тест_2», «Тест_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, а иногда и с двумя, например. Те или Уг. Но мы всегда находим каналы в Windows 10. Мы не устанавливали наше программное обеспечение на эти машины, мы просто искали существующие каналы с помощью консольного приложения. Так что с нашей точки зрения это выглядит так, как будто это проблема в Windows 7, а не в нашем приложении.
Поэтому мой вопрос не в том, как мы можем обойти эту проблему. Я уверен, что мы могли бы использовать другой шаблон и фильтровать впоследствии или использовать совершенно другой подход, который не основан на GetFiles/EnumerateFiles (думаю, это лучший вариант). Мой вопрос:
Почему поведение отличается в зависимости от ввода и, возможно, также от ОС?