Strona główna » Kursy » Kurs C# » Argumenty Linii Poleceń
 

Argumenty Linii Poleceń

Wstęp

Większość programów pozwala na uruchomienie programu w różnych trybach: normalnym, debugowania, awaryjnymi wielu innych. Wymuszenie odpowiedniego trybu pracy programu jest możliwe dzięki przekazywaniu argumentów w linii poleceń.

Opis

Każdy program w systemie można wywołać z pewnymi argumentami. Do programu są one przesyłane jako tablica łańcuchów znaków. Program może je zinterpretować, aby dostosować swoje działanie odpowiednio do żądania. W języku C# argumenty wywołania są przesyłane do funkcji Main() do zmiennej domyślnie nazwanej args.

  1. static void Main(string[] args) {

W przypadku prostych projektów rzadko są używane, ale mogą się one okazać bardzo przydatne podczas tworzenia bardziej zaawansowanych produktów. Dzięki temu jest przykładowo możliwe utworzenie trybu awaryjnego aplikacji, albo trybu w którym zostaną przeskanowane pliki w celu naprawy uszkodzonych fragmentów.

Przesyłanie argumentów

Konsola Systemowa

W celu przesłania argumentów do programu można posłużyć się konsolą systemową. W tym celu należy przejść do folderu gdzie znajduje się plik wykonywalny, a po nim podać argumenty jakie mają zostać przesłane do aplikacji. Rzecz jasna program musi mieć wbudowany fragment kodu, który przekazane argumenty zinterperetuje.

Oto przykładowe wywołanie programu i przekazaniem do niego danych:

  1. C:\Projekt.exe -mode DEBUG

Visual Studio

W przypadku posługiwania się środkowiskiem programistycznym takim jak Visual Studio możliwe jest uruchomienie programu z góry określonymi argumentami. W tym celu należy otworzyć Właściwości (Properties) projektu i kliknąć zakładkę Debug. Tam znajduje się w sekcji Uruchamianie (Start Options) pole opisane Argumenty Linii Poleceń (Command Line arguments). Pole to można uzupełnić danymi, które powinny zostać przekazane do uruchamianego programu.

Tu należy pamiętać, że w to pole wpisuje się tylko i wyłącznie argumenty. Ścieżkę dostępu oraz nazwę pliku wykonywalnego Visual Studio dołączy automatycznie.

Implementacja

Tryby pracy

Przypuśćmy, że chcemy dopuścić działanie programu w różnych trybach pracy. Jeśli nie zostanie ustawiony parametr -mode to program działa w trybie normalnym. Kiedy działa w trybie DEBUG to wszystkie zdarzenia są rejestrowane i zapisywane do pliku. Jest to uzasadnione w przypadku, gdy tworzenie dziennika w trybie normalnym miałoby spowodować spowolnienie działania aplikacji. Zwykle spotyka się jeszcze tryb awaryjny. Będzie go można włączyć przy pomocy wartości SAFE i pozwoli na odzyskanie danych użytkownika kiedy tryb normalny przestanie działać.

Konkretna implementacja jak miałby działać każdy z trybów jest zależna od tworzonego oprogramowania. Jednak sprawdzenie w jakim trybie ma zostać uruchomiony program mogłoby wyglądać tak:

  1. for(int i = 0; i < args.Length; i++) {
  2.   if(args[i] == "-mode")
  3.     tryb = args[i + 1];
  4. }

Z kolei jego interpretacja polegałałby na określeniu trybu, a następnie wypisaniu odpowiedniego komunikatu.

  1. switch (tryb) {
  2.   case "DEBUG":
  3.     Console.WriteLine("Tryb Debugowania programu");
  4.     break;
  5.   case "SAFE":
  6.     Console.WriteLine("Tryb awaryjny programu");
  7.     break;
  8.   default:
  9.     Console.WriteLine("Tryb normalny");
  10.     break;
  11. }

Oto przykładowe uruchomienie programu w celu zweryfikowania jego działania:

  1. C:\Projekt.exe -mode SAFE
  2. Tryb awaryjny programu

Dane

Zwykle przesyłanymi danymi do programu jest np. ścieżka dostępu do pliku oraz argumenty, które określają jak ma zostać skonwertowany. Jednak jest możliwe przesyłanie określonych wartościw celu np. wykonania szybkiego testu (choć zwykle używa się do tego standardowego strumienia). W poniższym przykładzie zakłada się, że pierwszy argument określa tekst w którym jest wyszukiwany znak, który jest przekazywany jako drugi argument.

  1. static void Main(string[] args) {
  2.   string tekst = args[0];
  3.   char znak = args[1][0];
  4.   int licznik = 0;
  5.   foreach(char c in tekst) {
  6.     if (c == znak)
  7.       licznik++;
  8.   }
  9.   Console.WriteLine(licznik);
  10.   Console.ReadKey();
  11. }

Uzyskany wynik można wypisać na konsolę, albo zapisać do pliku. Oto przykładowe wywołanie:

  1. C:\Projekt.exe AADAHUAJKA A
  2. 5

Uwagi końcowe

Korzystanie z argumentów może prowadzić do zgłoszenia wyjątków w programie, ponieważ użytkownik nie podał wartości dla danego parametru, albo popełnił literówkę. Z tego powodu bardzo ważne jest, aby program takie przypadki umiał ignorować.

Zadania

Zadanie 1

Napisz kalkulator, który będzie odczytywał dane z przekazanych argumentów. Przyjmuje się, że poprawny test to taki, gdy przekazane zostaną trzy wartości z czego pierwsza to będzie znak operacji, a drugi i trzeci to pewne liczby całkowite. Wynik powinien zostać wypisany na konsolę. Rozpoznowane powinny być operatory: dodawania (+), odejmowanie (-), mnożenia (*) oraz dzielenie (: lub /).

Poniżej zostało zaprezentowane wywołanie programu dla różnych argumentów:

  1. C:\Projekt.exe + 2 5
  2. 7
  3.  
  4. C:\Projekt.exe * 4 5
  5. 20