Risipa de key_press | Programare

Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Risipa de key_press | Programare - Programare .Net | Tehnici de programare | Tutoriale | Lectii si exemple

Argumente in linia de comanda.

Marea majoritate a programelor pe care le folosim accepta la executie o serie de parametri. Asta arata cam asa: numeProgram.exe [lista de parametri], unde [lista de parametri] reprezinta o lista optionala de parametri transmisi programului numeProgram.exe.
Cei care au folosit sisteme de operare MS_DOS sau unix/linux stiu cel mai bine cat de util este ca un program sa poata fi executat cu o lista de parametri si sa nu trebuiasca sa interactionam cu el pe parcursul executiei.

Sa presupunem ca am un program care muta fisierele din directorul Images in directorul Pictures. Cand programul intalneste un fisier care este ReadOnly sau Hidden ar trebui sa ceara confirmarea (asa cum Windows Explorer face) pentru a muta fisierul. Sunt cazuri cand vreau sa nu fiu intrebat. Vreau sa pot sa ii spun de la inceput: nu ma intreba, daca exista ceva ReadOnly, muta fara sa intrebi, sau treci mai departe. Cum as vrea sa pot scrie asta? Cam asa: muta.exe -ro yes -h no. Tradus, asta ar suna cam asa: daca fisierul care trebuyie mutat e ReadOnly (-ro), muta-l. Daca fisierul e hidden (-h), nu il muta.

Un exemplu mai bun decat cel prezentat anterior este batranul notepad.exe. Cand vrem sa vedem un fisier text, pornim Windows Explorer, gasim fisierul care ne intereseaza si cu un simplu dublu click fisierul respectiv este deschis in notepad. Cum functioneaza asta? Simplu: windowsul executa, in fundal, o comanda de genul: notepad.exe fullPath_fisier.txt, unde fullPath_fisier.txt este parametru trimis aplicatiei notepad.

O alta operatie pe care o putem face prin intermediul programului notepad e sa tiparim un fisier text. Pentru a face asta, ne folosim de un alt argument: notepad.exe /P fullPath_fisier.txt.


Scopul articolului de astazi e sa construiesc o aplicatie simpla, consola, care sa accepte o lista de parametri. Voi construi o aplicatie consola pentru a simplifica exemplele oferite, insa orice executabil (consola, fereastra) poate primi argumente.

Asa cum probabil stiti, executia unui program incepe in metoda Main. Aceasta metoda arata cam asa:

        static void Main(string[] args)
        {
            //... aplicatia porneste
        }

Dupa cum se poate vedea, metoda Main are un argument: string[] args, care reprezinta exact ceea ce utilizatorul va trimite ca parametru/i programului nostru. Array-ul va fi creat prin ruperea string-ului trimis ca parametru acolo unde apar spatiile albe (space).

Pentru a verifica daca am primit sau nu parametri, este suficient sa facem urmatoarea verificare:

    if(args.Length > 0)
    {
        //...avem ceva parametri
    }

Hai sa creem un program simplu, un fel de hello world, care sa primeasca ceva parametri si sa si faca ceva cu ei.

    static void Main(string[] args)
    {
        string fName = "";
        string lname ="";

        if(args.Length > 0)
        {
            //...avem ceva parametri
            for(int i=0; i<args.Length; i++)
            {
                if(args[i] == "-fn" && i + 1 < args.Length)  //verificam daca avem cava dupa -fn
                {
                    fName = args[i+1];
                }
                if(args[i] == "-ln" && i + 1 < args.Length)  //verificam daca avem cava dupa -ln
                {
                    lName = args[i+1];
                }
            }
        }
        else
        {
            Console.WriteLine("Lipsesc parametrii");
            return;
        }
        Console.WriteLine("Salut {0} {1}", fName, lName);
    }

In exemplul prezentat nu fac verificari in ceea ce priveste corectitudinea parametrilor. In viata reala, in practica, verificarile trebuiesc facute. Pot exista situatii in care sunt folosite niste valori prestabilite iar prin parametri primiti de la utilizatori doar modificam aceste valori. de exemplu, in cazul exemplului dat la inceput, cu programul care muta fisiere dintr-un folder in altul.
Utilizatorul poate executa urmatoarea linie: muta.exe -ro yes -h no. Ceea ce ar trebui sa faca parametri trimisi programului este sa modifici niste valori prestabilite. Probabil, intern, programul muta.exe ar treebui sa aiba ceva de genul:

    bool askForReadOnly = true;
    bool askForHidden = true;

Daca userul nu specifica altceva in linia de comanda, atunci aceste valori ar trebui folosite.
Foarte multe aplicatii accepta parametri transmisi in linia de comanda, insa sunt si foarte mult programatori, sau companii, care nu insclud optiunea de a transmite acest tip de parametri. Poate data viitoare cand scrii o aplicatie te gandesti: ce ar fi daca in loc sa pot deschide un fisier word cu dubluclick din windows explorer ar trebui sa deschid Word, sa apas Open, sa caut locul unde e fisierul pe care vreau sa il deschis etc.

Am scris acest articol mai mult pentru a aminti programatorilor de aceasta posibilitate si mai putin pentru a da exemple bune de folosire.

Category: Uncategorized
  • Alexandra says:

    Multumesc mult pentru articol, mi-a lamurit cateva neclaritati :D

    January 24, 2011 at 7:47 pm
    • zeltera says:

      Cu placere.

      January 24, 2011 at 8:49 pm

Your email address will not be published. Required fields are marked *

*