Args c что это
Перейти к содержимому

Args c что это

  • автор:

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

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

Евгений Кучерявый

Евгений Кучерявый

Пишет о программировании, в свободное время создаёт игры. Мечтает открыть свою студию и выпускать ламповые RPG.

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

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

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

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

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

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

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

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

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

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

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

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

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

Что такое Main(string[] args)

Часть Задания. папок, заданных пользователем в командной строке.
1. Что такое командная строка?
2. Просьба объяснить что такое Main(string[] args)?
3. Что я делаю когда жму свойства на проекте и в разделе пути для ссылок выбираю папки?

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Какого типа args main(string[] args)?
Привет всем 🙂 Я лабы сдавал по С# и вроде бы все выучил, но преподаватель спросил, "main(string.

static void Main(string[] args)
Что такое string args в строке static void Main(string args) и зачем это писать, если void.

Писать string[] args в параметрах Main — просто соглашение?
Писать string args в параметрах Main — просто соглашение?

Что из себя представляет каждый элемент массива string[] args
знаю ,что не совсем по теме,но все же.Что из себя представляет каждый элемент массива string.

101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283

ЦитатаСообщение от DmitryM5 Посмотреть сообщение

1. Что такое командная строка?
командная строка в винде это cmd

ЦитатаСообщение от DmitryM5 Посмотреть сообщение

Просьба объяснить что такое Main(string[] args)?
это как раз параметры запуска приложения из командной строки

ЦитатаСообщение от DmitryM5 Посмотреть сообщение

Что я делаю когда жму свойства на проекте и в разделе пути для ссылок выбираю папки?
выбираете папки.
Консультант Витте
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,350
Записей в блоге: 1

ЦитатаСообщение от Enotniy Посмотреть сообщение

командная строка в винде это cmd

это как раз параметры запуска приложения из командной строки

Как мне ввести директории двух папок в командной строке?
101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283
DmitryM5, никак, объясните цель, а то я не понимаю
Консультант Витте
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,350
Записей в блоге: 1

ЦитатаСообщение от Enotniy Посмотреть сообщение

DmitryM5, никак, объясните цель, а то я не понимаю

Нужно чтобы пользователь ввел строки(пути к двум папкам).
И как я понял они попадают в args[0],args[1]??

101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283

DmitryM5, да вы пишите в cmd что нибудь такое
C:\test.exe -C:\ -D:\
не уверен про ковычки

Добавлено через 2 минуты
DmitryM5, ну вот пример команды в ping www.google.com -t
команда ping с параметрами

Консультант Витте
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,350
Записей в блоге: 1

ЦитатаСообщение от Enotniy Посмотреть сообщение

DmitryM5, да вы пишите в cmd что нибудь такое
C:\test.exe -C:\ -D:\
не уверен про ковычки

Добавлено через 2 минуты
DmitryM5, ну вот пример команды в ping www.google.com -t
команда ping с параметрами

В Visual Studio нельзя чтоли вписать строки.
101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283

DmitryM5, string[] args — это массив, туда хоть миллион строк влезет, каждый параметр 1 строка, один элемент массива

Консультант Витте
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,350
Записей в блоге: 1

ЦитатаСообщение от Enotniy Посмотреть сообщение

DmitryM5, string[] args — это массив, туда хоть миллион строк влезет, каждый параметр 1 строка, один элемент массива

Блин как туда внести эти строки.
Я хочу чтоб пользователь ввел строку в окне и она поместилась в args[0],не?
И по поводу самого первого вопроса,3-ий пункт вы так и не ответили.

101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283

DmitryM5, они туда попадут только при запуске вашего exe с параметрами, а как запустить с параметрами- через командную строку, прописать в ярлыке, через FAR — это уже дело пользователя

Консультант Витте
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,350
Записей в блоге: 1

ЦитатаСообщение от Enotniy Посмотреть сообщение

DmitryM5, они туда попадут только при запуске вашего exe с параметрами, а как запустить с параметрами- через командную строку, прописать в ярлыке, через FAR — это уже дело пользователя

Или я не соображаю,либо мы с вами на разных языках говорим.
101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283

ЦитатаСообщение от DmitryM5 Посмотреть сообщение

3. Что я делаю когда жму свойства на проекте и в разделе пути для ссылок выбираю папки?

Добавлено через 1 минуту

ЦитатаСообщение от Enotniy Посмотреть сообщение

DmitryM5, никак, объясните цель, а то я не понимаю
Заблокирован

ЦитатаСообщение от Enotniy Посмотреть сообщение

DmitryM5, они туда попадут только при запуске вашего exe с параметрами,
Enotniy, не обязательно. Аргументы командной строки можно и непосредственно в VS поставить.
101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283

DmitryM5, Метод Main может быть объявлен с параметром string[], который содержит аргументы командной строки, или без него. При использовании Visual Studio для создания приложений Windows Forms, можно добавить параметр вручную или использовать класс Environment для получения аргументов командной строки. Параметры считываются в качестве нулевым индексированные аргументы командной строки. В отличие от C C и C-++, имя программы не рассматривается как первый аргумент командной строки.
MSDN

Заблокирован

ЦитатаСообщение от Enotniy Посмотреть сообщение

или использовать класс Environment для получения аргументов командной строки.
Почему нельзя просто к ним обратиться?

Console.WriteLine(args[1]);

101 / 102 / 31
Регистрация: 15.01.2014
Сообщений: 283
Ev_Hyper, ну тогда это уже не будет ввод через командную строку — весь смысл то в этом
Master of Orion

Эксперт .NET

6096 / 4952 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5

DmitryM5, чтобы запустить программу с параметрами либо нужно запускать через cmd (а не через дебаг студии), либо в настройках проекта забить эти самые параметры.

Параметры функции main (argc, argv)

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

int main(int argc, char* argv[]) // параметры функции main()

Эта строка — заголовок главной функции main() , в скобочках объявлены параметры argс и argv. Так вот, если программу запускать через командную строку, то существует возможность передать какую-либо информацию этой программе, для этого и существуют параметры argc и argv[] . Параметр argc имеет тип данных int , и содержит количество параметров, передаваемых в функцию main . Причем argc всегда не меньше 1, даже когда мы не передаем никакой информации, так как первым параметром считается имя функции. Параметр argv[] это массив указателей на строки. Через командную строку можно передать только данные строкового типа. Указатели и строки — это две большие темы, под которые созданы отдельные разделы. Так вот именно через параметр argv[] и передается какая-либо информация. Разработаем программу, которую будем запускать через командную строку Windows, и передавать ей некоторую информацию.

// argc_argv.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv[]) < if (argc >1)// если передаем аргументы, то argc будет больше 1(в зависимости от кол-ва аргументов) < cout else < cout system("pause"); return 0; >
// argc_argv.cpp: определяет точку входа для консольного приложения. #include using namespace std; int main(int argc, char* argv[]) < if (argc >1)// если передаем аргументы, то argc будет больше 1(в зависимости от кол-ва аргументов) < cout else < cout return 0; >

После того как отладили программу, открываем командную строку Windows и перетаскиваем в окно командной строки экзэшник нашей программы, в командной строке отобразится полный путь к программе(но можно прописать путь к программе в ручную), после этого можно нажимать ENTER и программа запустится (см. Рисунок 1).

Аргументы функции main()

Рисунок 1 — Параметры функции main

Так как мы просто запустили программу и не передавали ей никаких аргументов, появилось сообщение Not arguments . На рисунке 2 изображён запуск этой же программы через командную строку, но уже с передачей ей аргумента Open .

Аргументы функции main()

Рисунок 2 — Параметры функции main

Аргументом является слово Open , как видно из рисунка, это слово появилось на экране. Передавать можно несколько параметров сразу, отделяя их между собой запятой. Если необходимо передать параметр состоящий из нескольких слов, то их необходимо взять в двойные кавычки, и тогда эти слова будут считаться как один параметр. Например, на рисунке изображен запуск программы, с передачей ей аргумента, состоящего из двух слов — It work .

Аргументы функции main()

Рисунок 3 — Параметры функции main

А если убрать кавычки. То увидим только слово It . Если не планируется передавать какую-либо информацию при запуске программы, то можно удалить аргументы в функции main() , также можно менять имена данных аргументов. Иногда встречается модификации параметров argc и argv[] , но это все зависит от типа создаваемого приложения или от среды разработки.

К сожалению, для данной темы пока нет подходящих задач. Если у вас есть таковые на примете, отправте их по адресу: admin@cppstudio.com. Мы их опубликуем!

C#. Метод main(). Способы объявления

Метод Main() . Способы объявления. Передача аргументов в функцию Main() . Метод GetCommandLineArgs() класса Environment

Поиск на других ресурсах:

1. Назначение метода Main() . Особенности применения

Функция Main() – это специальная функция, которая предназначена для начала выполнения любой программы и имеет следующие особенности применения:

  • функция Main() есть точкой входа в любую программу на языке C#. Термин «точка входа» означает, что выполнение программы начинается из функции Main() ;
  • функция Main() считается главной функцией в программе, которая может вызывать другие функции, реализованные в программе;
  • функция Main() может получать параметры. С помощью этих параметров другая программа может передавать некоторую информацию (данные) в текущую программу;
  • функция Main() может возвращать целочисленное значение, которое будет сигнализировать о результате выполнения программы. Это необходимо в случаях, если программа вызывается из другой программы (процесса). Чаще всего процессом, который вызывает функцию Main() есть операционная система;
  • в программе функция с именем Main() может быть только одна. Иными словами, функция Main() не может быть перегружена;
  • функция Main() есть статической, то есть в начале объявления содержит модификатор static . Это означает, что функция вызывается без создания экземпляра класса. Статичность функции необходима, так как при первом запуске еще не создано никаких экземпляров классов. Существуют только статические методы и переменные. Эти методы и переменные инициализируются автоматически при первом обращении к ним.
2. Способы объявления функции Main()

Функция Main() может быть объявлена одним из четырех возможных способов, перечисленных ниже.

Способ 1. Функция не возвращает значения и не получает параметров. Общая форма функции Main() в этом случае следующая:

static void Main() < // действия, операторы // . >

Способ 2. Функция возвращает целочисленное значение и не получает параметров. В этом случае общая форма функции следующая

static int Main() < // действия, операторы // . return value; >

Здесь value – некоторое целочисленное значение, которое есть результатом возврата из программы. Другие процессы, запускающие текущую программу, могут использовать этот результат. Например, если функция Main() возвращает -1, то это может означать внутреннюю ошибку. И, наоборот, если функция возвращает 0, то это может означать корректное выполнение программы.

Способ 3. Функция не возвращает значения, но получает параметры. Параметрами функции Main() может быть массив строк. В этом случае общая форма функции следующая:

static void Main(string[] args) < // действия, операторы // . >
  • args – массив строк, который передается в функцию Main() из других процессов.

Способ 4. Функция возвращает целочисленное значение и получает параметры. Общая форма объявления функции следующая

static void Main(string[] args) < // действия, операторы // . return value; >
  • args – массив строк, который передается в функцию Main() из других процессов;
  • value – значение типа int , которое передается в процесс, который вызвал текущую программу.
3. Модификаторы доступа, которые могут применяться с функцией Main()

Функция Main() может быть объявлена с двумя модификаторами доступа:

  • private – в этом случае функция Main() не может вызываться из других сборок непосредственно;
  • public – функция Main() есть общедоступной из других сборок.
4. Зачем в качестве параметров в функцию Main() передается массив строк?

В качестве параметров в любую программу (функцию Main() ) вызывающий процесс (операционная система) может передать только строку символов. Если эта строка содержит слова, которые разделены символом пробел, то эта строка разбивается на массив строк.

Например. Пусть сделан вызов программы с именем Project1.exe следующим образом:

Project1.exe param1 param2 file1.txt

то функция Main() программы Project1.exe получит следующий массив входных параметров

param1 param2 file1.txt

то есть, для следующего объявления функции

void Main(string[] args) < // . >

значения переменной args будут следующими:

args.Length = 3 args[0] = "param1" args[1] = "param2" args[2] = "file1.txt"
5. Пример, который демонстрирует применение параметров в функции Main()

В примере продемонстрирован вывод массива параметров на экран. Программа создана по шаблону Console Application.

using System; namespace ConsoleApp1 < class Program < static void Main(string[] args) < // Пример вывода массива параметров args на экран Console.WriteLine("args.Length = ", args.Length); for (int i = 0; i < args.Length; i++) < Console.WriteLine("args[] = ", i, args[i]); > > > >

Результат выполнения программы ConsoleApp1.exe для строки

ConsoleApp1 param1 param2 file1.txt

имеет следующий вид

args.Length = 3 args[0] = param1 args[1] = param2 args[2] = file1.txt
6. Установка параметров, которые передаются в функцию Main() , средствами Microsoft Visual Studio 2019

В системе Microsoft Visual Studio любой версии можно задавать параметры, которые передаются в функцию Main() . Эти параметры еще называются аргументы командной строки.

Чтобы задать аргументы командной строки используется команда Properties… из меню Project .

Например, если создано консольное приложение с именем решения ConsoleApp1 , то вызвать окно настройки параметров можно с помощью команды

Project -> ConsoleApp1 Properties.

как показано на рисунке 1.

Microsoft Visual Studio - C#. Команда вызова свойств проекта

Рисунок 1. Команда вызова свойств проекта

В результате откроется окно «ConsoleApp1» , в котором нужно активировать элемент Debug (рисунок 2). В левой части окна в поле «Application arguments» нужно ввести аргументы командной строки. Эти аргументы будут передаваться в функцию Main() . Таким образом, можно протестировать вызов текущей программы из других процессов передавая программе различные варианты аргументов.

MS Visual Studio - C#. Функция Main(). Установка аргументов командной строки

Рисунок 2. Установка аргументов командной строки

7. Каким образом в функцию Main() передать строку, которая содержит пробелы?

Бывают случаи, когда в функцию Main() нужно передать строку как один параметр. Но эта строка может содержать пробелы. В этом случае строку нужно заключить в двойные кавычки. Все что размещается между двойными кавычками не разбивается по параметрам.

Например. Пусть в функцию Main() для приложения с именем ConsoleApp1.exe нужно передать два параметра-строки:

  • «This is a parameter»;
  • «Second parameter».

В этом случае, вызов ConsoleApp1.exe из другого процесса (например, из командной строки) будет следующим:

ConsoleApp1.exe "This is a parameter" "Second parameter"

В этом случае в функцию Main() будут переданы следующие значения массива args :

args.Length = 2 args[0] = "This is a parameter" args[1] = "Second parameter"
8. Получение параметров с помощью метода GetCommandLineArgs() класса Environment . Пример

Получить параметры командной строки можно с помощью метода GetCommandLineArgs() класса Environment . Этот метод есть статическим, а потому не нужно создавать экземпляр класса Environment . Метод возвращает массив аргументов типа string[] .

Важно помнить, что метод GetCommandLineArgs() возвращает массив параметров на один больше. Первым параметром, который возвращает метод (под индексом 0) идет полное имя к текущему выполняемому файлу.

Пример. Вывод на экран списка параметров, передаваемых в функцию Main() .

using System; namespace ConsoleApp1 < class Program < static void Main(string[] args) < // Вывести список параметров с помощью метода GetCommandLineArgs() // класса Environment string[] parameters = Environment.GetCommandLineArgs(); Console.WriteLine("Parameters:"); foreach (string s in parameters) < Console.WriteLine(s); > Console.ReadKey(); > > >
9. Определение полного имени файла выполняемой программы

Полное имя файла выполняемой программы можно определить с помощью статического метода GetCommandLineArgs() класса Environment. Как известно, метод используется для определения параметров текущей программы в виде массива строк типа string[] . При вызове метода, параметр, который возвращается, с индексом 0 содержит полное имя файла текущей программы.

Нижеследующий фрагмент кода демонстрирует вывод полного имени файла текущей программы

// Вывести полный путь к файлу текущей программы string path = Environment.GetCommandLineArgs()[0]; Console.WriteLine("Full path = ", path);

Связанные темы

  • Понятие метода. Примеры методов в классах. Возврат из метода. Оператор return . Методы без параметров. Ключевое слово void
  • Передача параметров в метод. Аргументы и формальные параметры. Примеры. Передача ссылки на объект класса в метод

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *