Работа с аргументами командной строки в C#
Как известно с любой компьютерной программой можно работать посредством нескольких программных интерфейсов:
с помощью графического интерфейса, веб-интерфейса или интерфейса командной строки.
В этой статье мы рассмотрим, как работать с аргументами командной строки в C#.
Аргументы командной строки — это значения, передаваемые консольным программам, обычно, через терминал.
Мы можем передать аргументы командной строки в метод Main, объявив этот метод с типом параметра string[].
В первом примере мы передаем аргументы командной строки методу Main.
namespace MyRusakov.App
{
public class Program
{
// все параметры, переданные программе попадут в массив args
public static void Main(string[] args)
{
foreach (string arg in args)
{
Console.WriteLine(arg);
}
}
}
}
Выполним программу и посмотрим на вывод в консоли:
$ dotnet run This Is Myrusakov Post
This
Is
Myrusakov
Post
C# Метод Environment.GetCommandLineArgs
Метод Environment.GetCommandLineArgs возвращает массив строк, содержащий аргументы командной строки для текущего процесса.
Кроме того, данный метод также возвращает полный путь к запущенной программе:
$ dotnet run This Is Myrusakov Post
C:UsersMyRusakovDocumentsCSharpCmdArgsbinDebugnet6.0CSharpCmdArgs.dll
This
Is
Myrusakov
Post
Свойство C# Environment.CommanLine
Свойство C# Environment.CommanLine возвращает строку, содержащую аргументы командной строки.
using System;
using System.Linq;
namespace MyRusakov.App
{
public class Program
{
public static void Main()
{
// строка вместе с путем к программе и переданными ей параметрами
string args_str = Environment.CommandLine;
Console.WriteLine(args_str);
// делим всю строку по символу пробела
string[] arg_values = args_str.Split(" ");
try
{
var formatted = string.Join(",", arg_values.Skip(1).Select(str => $" -[str]- "));
Console.WriteLine($"Итоговая строка: {formatted}");
return 0;
}
catch (FormatException e)
{
Console.WriteLine("Ошибка: " + e.Message);
return 1;
}
}
}
}
C# CommandLineParser
При работе с аргументами командной строки часто приходится с их помощью задавать различные настройки работы программы.
Для упрощения этой работы создано множество различных библиотек, одной из таких библиотек является C# библиотека CommandLineParser.
Добавим эту библиотеку в проект:
C:> dotnet add package CommandLineParser
using CommandLine;
namespace MyRusakov.App
{
/**
С помощью этого класса определяем набор аргументов командной строки,
которые принимает наше приложение
*/
class CLIOptions
{
[Option("paths")]
public IEnumerable<string>? Paths { get; set; }
}
public class Program
{
public static void Main(string[] args)
{
// разбираем аргументы, переданные программе
var parser = Parser.Default.ParseArguments<CLIOptions>(args);
parser.WithParsed<CLIOptions>(opt =>
{
if (opt.Paths != null)
{
foreach(var path in paths)
{
Console.WriteLine($"Путь {path}");
}
}
else
{
Console.WriteLine("Передайте программе список аргументов");
}
});
}
}
}
Как видно из примера выше программа определяет аргумент командной строки —paths, который принимает список путей.
Пример работы программы ниже:
C:> dotnet run --paths C:ProjectsTestEx1passwords1.txt C:ProjectsTestEx1passwords2.txt
Путь C:ProjectsTestEx1passwords1.txt
Путь C:ProjectsTestEx1passwords2.txt
Таким образом в данной статье мы рассмотрели с Вами работу с аргументами командной строки в C#, а также одну из библиотек,
которая позволяет эту работу автоматизировать.