Pobieranie parametrów wejściowych w programie .NET C#

6-lut-2011

Chociaż obecne aplikacje raczej pozwalają na wprowadzanie opcji i parametrów w ładnych okienkach, to jednak od czasu do czasu trzeba przygotować program uruchamiany z linii komend i przyjmujący parametry określane podczas wywoływania w skrypcie.

Odpowiednich zmian można dokonać w pliku program.cs. Znajduje się w nim startowa metoda Main, od której zaczyna się uruchomienie programu. Zazwyczaj nie wykazujemy parametrów w tej metodzie, jednak tutaj należy wyraźnie wskazać, że program można wywołać z parametrami:

        static void Main(string[] args)
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
           //specjalny obiekt zapamietujący logikę działania aplikacji
           bl=new BusinessLogic();

Dalej próbujemy odszukać przekazane parametry:

            try
            {
                for (int i = 0; i < args.Length; i++)
                {

Ponieważ użytkownik mógł „pomieszać” kolejność wpisów należy raczej badać jakie znaczenie ma ten kolejny parametr. Świetnie spisuje się tutaj konstrukcja switch:

                    switch (args[i])
                    {
                        case „/s”:
                            bl.SilentMode = true;
                            break;
                        case „/c”:
                            bl.CanRestart = true;
                            break;
                        case „/a”:
                            bl.ActualizeFile = true;
                            break;                        case „/e”:
                            bl.Mode = ProgramState.Export;
                            if (i + 1 >= args.Length)
                                throw new Exception(„Błąd w parametrach”);
                            else
                            {
                                bl.FilePath = args[i + 1];
                                i++;
                            }
                            break;

W przypadku opcji /e działanie jest mniej standardowe. Po opcji /e zawsze powinna pojawić się nazwa pliku. Dlatego też sprawdzamy czy kolejny parametr istnieje, a jeżeli tak, to pobieramy jego wartość i przesuwamy wskaźnik i (służący do numerowania przekazanych parametrów) o 1. Inna sprawa czy taki plik istnieje. To nie jest tutaj sprawdzane.

                        case „/i”:
                            bl.Mode = ProgramState.Import;
                            if (i + 1 >= args.Length)
                                throw new Exception(„Błąd w parametrach”);
                            else
                            {
                                bl.FilePath = args[i + 1];
                                i++;
                            }
                            break;
                        default:
                            break;
                    }
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(„Błąd” + Environment.NewLine + ex.Message);
            }
   }

Ten mechanizm pobierania  parametrów nie określił żadnych wartości domyślnych dla parametrów. Robi to klasa BusinessLogic. Przekazane do programu parametry przedefiniowują te wartości domyślne. Podobnie nie odbyło się tu żadne sprawdzenie, czy przekazane opcje nie powodują konfliktu. To też mogłoby być sprawdzane w klasie BusinessLogic podczas zapisywania parametrów.

Komentarze są wyłączone

Autor: Rafał Kraik