Код
#Руководства

Аргументы запуска в C#: что это и как их применять

Входные параметры полезны не только в консольных приложениях, но даже в играх. Что это и как они нам пригодятся?

 vlada_maestro / shutterstock

Создавая приложение на C#, вы могли заметить, что у метода Main () должен быть аргумент:

static void Main(string[] args)
{
   Console.WriteLine("Hello World!");
}

Вернее, целый массив аргументов. Он нужен, чтобы влиять на работу программы: например, запускать ваше приложение из другого приложения, передавая ему любую команду.

Давайте разберёмся, как передавать и использовать аргументы при запуске приложения на C#.

Как передавать входные аргументы в C#

Так как это обычный массив строк, мы можем перебрать его, чтобы получить все аргументы:

static void Main(string[] args)
{
   foreach(string arg in args)
   {
       Console.WriteLine(arg);
   }
}

Скомпилируйте приложение, а затем запустите его через терминал, указав аргументы после названия файла.

Важно! Аргументы разделяются пробелом, и, если вы хотите передать какой-то текст, его нужно заключить в двойные кавычки:

В Windows всё работает аналогичным образом.

Как мы видим, каждый аргумент был выведен на новой строке.

Вы можете создать ярлык, который будет запускать приложение c определёнными аргументами. Для этого зайдите в свойства ярлыка и укажите все аргументы в поле Target:

На русском языке поле будет называться «Путь».

Сработает это так же, как если бы вы передали аргумент через консоль:

Как использовать входные аргументы в C#

Мы можем проверять, какие аргументы передал пользователь, чтобы потом реагировать на это. Например, показать справку:

static void Main(string[] args)
{
   foreach(string arg in args)
   {
       //Если пользователю нужна помощь
       if(arg == "-help")
       {
           //Показываем справку
           ShowHelp();
 
           //Прерываем цикл, чтобы пользователь мог увидеть только справку
           break;
       }
   }
}
 
public static void ShowHelp()
{
   Console.WriteLine("----Commands----\n-help - show help\n-i - input file e. g. -i file.txt\n-o - output file e. g. -o file.txt");
}

Вот как она выглядит:

Здесь перед аргументами стоят дефисы — такие аргументы называются флагами и помогают программе понять, что от неё хотят. В нашем случае в справке написано, что вы можете ввести команду:

./Sharp -i file

Программа поймёт, что это путь к файлу. Остаётся только прописать всю логику. Для этого придётся заменить цикл foreach на for, потому что нам важно иметь доступ к индексам аргументов:

for(int i = 0; i < args.Length; i++)
{
   if(args[i] == "-help")
   {
       ShowHelp();
 
       break;
   }
 
   //Переменная для хранения текста из файла
   string text = "";
 
   //Проверяем, является ли текущий аргумент флагом -i
   if(args[i] == "-i")
   {
       //Если дальше нет аргументов, выводим ошибку
       if(i + 1 >= args.Length)
       {
           Console.WriteLine("Missing argument!");
           break;
       }
       else
       {
           //Иначе считываем текст из файла, адрес которого идёт после флага
           //Не забудьте проверить, существует ли такой файл
           text = File.ReadAllText(args[i + 1]);
 
           if(i + 2 >= args.Length || args[i + 2] != "-o")
           {
               //Если дальше нет флага -o, то просто выводим текст в сообщении
               Console.WriteLine(text);
           }
           else
           {
               //Если флаг -o есть, то проверяем, указан ли адрес нового файла
               if(i + 3 >= args.Length)
               {
                   //Если нет, то выводим ошибку
                   Console.WriteLine("Missing argument!");
                   break;
               }
               else
               {
                   //Если есть, то сохраняем данные в новый файл
                   File.WriteAllText(args[i + 3], text);
               }
           }
       }
   }
}

Если вы укажете флаг -i, то эта программа должна считать и вывести данные из файла:

Если после этого вы добавите ещё и флаг -o, то программа сохранит данные в новый файл:

Где это может пригодиться

Способов применения входных аргументов может быть очень много. Тот же компилятор.NET работает с помощью них. Вот только некоторые:

Например, чтобы создать консольное приложение, нужно ввести команду dotnet new console. А если потом его надо скомпилировать и запустить — dotnet run.

Еще одна область применения — игры. Вы можете указывать аргументы напрямую для ярлыка игры или же через настройки запуска в Steam. Например, желаемое разрешение:

Опции запуска Dark Messiah of Might and Magic:
PROTON_FORCE_LARGE_ADDRESS_AWARE=1 %command% -w 1920 -h 1080

Вы можете добавить любые опции:

  • включение режима Разработчика с расширенными возможностями;
  • включение режима пониженной нагрузки;
  • запуск в полноэкранном режиме и так далее.
Проверьте свой английский. Бесплатно ➞
Нескучные задания: small talk, поиск выдуманных слов — и не только. Подробный фидбэк от преподавателя + персональный план по повышению уровня.
Пройти тест
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована