0 added
0 removed
Original
2026-01-01
Modified
2026-02-21
1
<p><a>#Руководства</a></p>
1
<p><a>#Руководства</a></p>
2
<ul><li>2 июл 2020</li>
2
<ul><li>2 июл 2020</li>
3
<li>0</li>
3
<li>0</li>
4
</ul><p>Входные параметры полезны не только в консольных приложениях, но даже в играх. Что это и как они нам пригодятся?</p>
4
</ul><p>Входные параметры полезны не только в консольных приложениях, но даже в играх. Что это и как они нам пригодятся?</p>
5
<p> vlada_maestro / shutterstock</p>
5
<p> vlada_maestro / shutterstock</p>
6
<p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
6
<p>Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.</p>
7
<p>Создавая приложение на C#, вы могли заметить, что у метода<em>Main ()</em>должен быть аргумент:</p>
7
<p>Создавая приложение на C#, вы могли заметить, что у метода<em>Main ()</em>должен быть аргумент:</p>
8
static void Main(string[] args) { Console.WriteLine("Hello World!"); }<p>Вернее, целый массив аргументов. Он нужен, чтобы влиять на работу программы: например, запускать ваше приложение из другого приложения, передавая ему любую команду.</p>
8
static void Main(string[] args) { Console.WriteLine("Hello World!"); }<p>Вернее, целый массив аргументов. Он нужен, чтобы влиять на работу программы: например, запускать ваше приложение из другого приложения, передавая ему любую команду.</p>
9
<p>Давайте разберёмся, как передавать и использовать аргументы при запуске приложения на C#.</p>
9
<p>Давайте разберёмся, как передавать и использовать аргументы при запуске приложения на C#.</p>
10
<p>Так как это обычный массив строк, мы можем перебрать его, чтобы получить все аргументы:</p>
10
<p>Так как это обычный массив строк, мы можем перебрать его, чтобы получить все аргументы:</p>
11
static void Main(string[] args) { foreach(string arg in args) { Console.WriteLine(arg); } }<p>Скомпилируйте приложение, а затем запустите его через терминал, указав аргументы после названия файла.</p>
11
static void Main(string[] args) { foreach(string arg in args) { Console.WriteLine(arg); } }<p>Скомпилируйте приложение, а затем запустите его через терминал, указав аргументы после названия файла.</p>
12
<p>Важно! Аргументы разделяются пробелом, и, если вы хотите передать какой-то текст, его нужно заключить в двойные кавычки:</p>
12
<p>Важно! Аргументы разделяются пробелом, и, если вы хотите передать какой-то текст, его нужно заключить в двойные кавычки:</p>
13
<a></a><em>В Windows всё работает аналогичным образом.</em><p>Как мы видим, каждый аргумент был выведен на новой строке.</p>
13
<a></a><em>В Windows всё работает аналогичным образом.</em><p>Как мы видим, каждый аргумент был выведен на новой строке.</p>
14
<p>Вы можете создать ярлык, который будет запускать приложение c определёнными аргументами. Для этого зайдите в свойства ярлыка и укажите все аргументы в поле<em>Target</em>:</p>
14
<p>Вы можете создать ярлык, который будет запускать приложение c определёнными аргументами. Для этого зайдите в свойства ярлыка и укажите все аргументы в поле<em>Target</em>:</p>
15
<a></a><em>На русском языке поле будет называться "Путь".</em><p>Сработает это так же, как если бы вы передали аргумент через консоль:</p>
15
<a></a><em>На русском языке поле будет называться "Путь".</em><p>Сработает это так же, как если бы вы передали аргумент через консоль:</p>
16
<a></a><p>Мы можем проверять, какие аргументы передал пользователь, чтобы потом реагировать на это. Например, показать справку:</p>
16
<a></a><p>Мы можем проверять, какие аргументы передал пользователь, чтобы потом реагировать на это. Например, показать справку:</p>
17
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"); }<p>Вот как она выглядит:</p>
17
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"); }<p>Вот как она выглядит:</p>
18
<a></a><p>Здесь перед аргументами стоят дефисы - такие аргументы называются флагами и помогают программе понять, что от неё хотят. В нашем случае в справке написано, что вы можете ввести команду:</p>
18
<a></a><p>Здесь перед аргументами стоят дефисы - такие аргументы называются флагами и помогают программе понять, что от неё хотят. В нашем случае в справке написано, что вы можете ввести команду:</p>
19
<p>Программа поймёт, что это путь к файлу. Остаётся только прописать всю логику. Для этого придётся заменить цикл<em>foreach</em>на <em>for</em>, потому что нам важно иметь доступ к индексам аргументов:</p>
19
<p>Программа поймёт, что это путь к файлу. Остаётся только прописать всю логику. Для этого придётся заменить цикл<em>foreach</em>на <em>for</em>, потому что нам важно иметь доступ к индексам аргументов:</p>
20
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); } } } } }<p>Если вы укажете флаг<em>-i</em>, то эта программа должна считать и вывести данные из файла:</p>
20
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); } } } } }<p>Если вы укажете флаг<em>-i</em>, то эта программа должна считать и вывести данные из файла:</p>
21
<a></a><p>Если после этого вы добавите ещё и флаг<em>-o</em>, то программа сохранит данные в новый файл:</p>
21
<a></a><p>Если после этого вы добавите ещё и флаг<em>-o</em>, то программа сохранит данные в новый файл:</p>
22
<a></a><p>Способов применения входных аргументов может быть очень много. Тот же компилятор.NET работает с помощью них. Вот только некоторые:</p>
22
<a></a><p>Способов применения входных аргументов может быть очень много. Тот же компилятор.NET работает с помощью них. Вот только некоторые:</p>
23
<a></a><p>Например, чтобы создать консольное приложение, нужно ввести команду<em>dotnet new console</em>. А если потом его надо скомпилировать и запустить -<em>dotnet run</em>.</p>
23
<a></a><p>Например, чтобы создать консольное приложение, нужно ввести команду<em>dotnet new console</em>. А если потом его надо скомпилировать и запустить -<em>dotnet run</em>.</p>
24
<p>Еще одна область применения - игры. Вы можете указывать аргументы напрямую для ярлыка игры или же через настройки запуска в Steam. Например, желаемое разрешение:</p>
24
<p>Еще одна область применения - игры. Вы можете указывать аргументы напрямую для ярлыка игры или же через настройки запуска в Steam. Например, желаемое разрешение:</p>
25
<a></a><em>Опции запуска Dark Messiah of Might and Magic:</em><em>PROTON_FORCE_LARGE_ADDRESS_AWARE=1 %command% -w 1920 -h 1080</em><p>Вы можете добавить любые опции:</p>
25
<a></a><em>Опции запуска Dark Messiah of Might and Magic:</em><em>PROTON_FORCE_LARGE_ADDRESS_AWARE=1 %command% -w 1920 -h 1080</em><p>Вы можете добавить любые опции:</p>
26
<ul><li>включение режима Разработчика с расширенными возможностями;</li>
26
<ul><li>включение режима Разработчика с расширенными возможностями;</li>
27
<li>включение режима пониженной нагрузки;</li>
27
<li>включение режима пониженной нагрузки;</li>
28
<li>запуск в полноэкранном режиме и так далее.</li>
28
<li>запуск в полноэкранном режиме и так далее.</li>
29
</ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
29
</ul><a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>