在.NET Core应用程序中扩展通配符

时间:2018-12-28 20:39:00

标签: .net-core command-line-interface cross-platform wildcard

我正在使用.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 Terminal上展开,但在Windows PowerShell上不展开。

对于跨平台友好方法中解决此问题的最佳实践有何想法?

一些细节:

  • 我使用Microsoft.Extensions.CommandLineUtils进行命令行参数解析;

  • 要获取通过通配符指定的文件名,我使用Directory.GetFiles(Path.GetDirectoryName(input), Path.GetFileName(input)),其中input是通配符路径(例如./*.txt);

    < / li>
  • 我有一个 hacky 解决方案,类似于the snippet on this question;但我不喜欢它,因为它使我向应用程序中引入了平台特定的代码(我希望.NET Core可以为我处理):(a)在终端上扩展了通配符char时,和(b)当在PowerShell上未扩展通配符char时。

0 个答案:

没有答案