Работа с аргументами командной строки в 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#, а также одну из библиотек, которая позволяет эту работу автоматизировать.

Источник