Я использую .NET Core для написания кроссплатформенного приложения.Входные данные для моего приложения - несколько путей к файлам;аналогично следующему:
dotnet myApp.dll file1.txt file2.txt C:\Data\anotherFile.txt
Для простоты я бы хотел, чтобы пользователь мог указывать входные файлы, используя подстановочные знаки.Например:
dotnet myApp.dll ./*.txt C:\Data\anotherFile.txt
Когда я выполняю вышеупомянутую команду в Windows (PowerShell), аргументы myApp
получают:
./*.txt
anotherFile.txt
Но когда я запускаю приложение на Mac (Терминал), получаемые аргументы myApp
:
file1.txt
file2.txt
anotherFile.txt
Другими словами, символы подстановки раскрываются в Терминале Mac, но не в Windows PowerShell.
Есть какие-нибудь мысли о том, как лучше всего решить эту проблему с помощью межплатформенного метода?
Некоторые детали:
Я использую Microsoft.Extensions.CommandLineUtils
для аргументов командной строкипарсинг;
Чтобы получить имена файлов, указанные с помощью символов подстановки, я использую Directory.GetFiles(Path.GetDirectoryName(input), Path.GetFileName(input))
, где input
- это путь с подстановочными знаками (например, ./*.txt
);
У меня есть решение hacky , аналогичное фрагменту этого вопроса ;но мне это не нравится, потому что это заставляет меня вводить платформо-зависимый код в мое приложение (которое, как я ожидаю, .NET Core будет обрабатывать для меня): (а) когда подстановочный символ расширяется в Терминале, и (б)когда подстановочный символ НЕ раскрывается в PowerShell.