Аргументы запуска в 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);
}
}
Скомпилируйте приложение, а затем запустите его через терминал, указав аргументы после названия файла.
Важно! Аргументы разделяются пробелом, и, если вы хотите передать какой-то текст, его нужно заключить в двойные кавычки:
Как мы видим, каждый аргумент был выведен на новой строке.
Вы можете создать ярлык, который будет запускать приложение 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. Например, желаемое разрешение:
Вы можете добавить любые опции:
- включение режима Разработчика с расширенными возможностями;
- включение режима пониженной нагрузки;
- запуск в полноэкранном режиме и так далее.