Работа с аргументами командной строки в 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:\Users\MyRusakov\Documents\CSharpCmdArgs\bin\Debug\net6.0\CSharpCmdArgs.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:\Projects\TestEx1\passwords1.txt C:\Projects\TestEx1\passwords2.txt
Путь C:\Projects\TestEx1\passwords1.txt
Путь C:\Projects\TestEx1\passwords2.txt
Таким образом в данной статье мы рассмотрели с Вами работу с аргументами командной строки в C#, а также одну из библиотек, которая позволяет эту работу автоматизировать.
-
- Михаил Русаков
Комментарии (0):
Для добавления комментариев надо войти в систему.
Если Вы ещё не зарегистрированы на сайте, то сначала зарегистрируйтесь.