Home Page Home Page Articoli Costruire Console Applications con Visual Studio .NET

Costruire Console Applications con Visual Studio .NET

Spiegheremo in questo articolo i passi base fondamentali per costruire Console Applications utilizzando Visual Studio .NET.
Autore: David De Giacomi Livello:
Tanti anni fa... l'MS-DOS
Per diversi anni il sistema operativo DOS è stato uno dei più usati. Era uno dei primi, se non il primo, sistema operativo di massa montato sui PC che man mano si stavano diffondendo nella società.
Era un sistema operativo senza interfaccia grafica e quindi testuale molto diverso da quello che oggi noi conosciamo come Sistema Operativo (per esempio Windows).
L'MS-DOS era composto principalmente da un file il Command.com, o interprete dei comandi, che si incaricava di gestire i comandi impartiti dall'utente, di mostrare messaggi d'errore e così via.
Oltre questa struttura di base c'erano ulteriori comandi di contorno più evoluti come deltree.exe, tree.exe, ecc.
Ad oggi il Command.com (16-bit) è stato rimpiazzato nei sistemi Windows da un'interprete più potente Cmd.exe a 32-bit.
Ma non vi siete mai chiesti com'è possibile creare questi programmi lanciati da linea di comando (del prompt) ?
Ebbene così come Visual Studio 6.0 anche la versione 7.0 del rinnovato ambiente Microsoft oltre a permettere la costruzione di applicazioni evolute come Web Applications, Web Services e Win Forms permette anche di creare questo tipo di applicazioni che sono chiamate Console Applications.

Prompt di MS-DOS e interprete cmd.exe comune su Sistemi Windows NT/2K/XP
Prompt di MS-DOS e interprete cmd.exe comune su Sistemi Windows NT/2K/XP


Struttura di una Console Application
Un'applicazione di questo tipo utilizza principalmente due Stream, due flussi, uno in Input e uno in Output rispettivamente per prendere i dati dall'esterno inseriti dall'utente e per stampare a schermo i risultati delle elaborazioni e i dati.
A questi due Stream se ne affianca un terzo che è Error che permette di segnalare in Output degli errori. Riepilogando gli Stream utilizzati sono i seguenti:

  • Input Stream In

  • Output Stream In

  • Error Stream In


Questi Stream sono implementati tramite le proprietà In, Out ed Err della classe System.Console e non rappresentano altro che degli Stream classici System.IO.TextReader per quanto riguarda In e System.IO.TextWriter per quanto riguarda gli altri due.
I dati in ingresso e uscita vengono rappresentati a schermo ma potrebbero essere usati anche degli Stream ad hoc e scrivere i dati in uscita per esempio su disco.

Inoltre per avviarsi un'applicazione Console necessità di una funzione Main di avvio che ha fra i suoi parametri un array di stringhe, vediamo il prototipo qui sotto:


static void Main(string[] args)
{

//Scrivete qui il vostro codice

return;
}


Avrete tutti usato comandi come copy, xcopy o simili. Sapete benissimo che accettano diversi parametri o switch anche contemporaneamente come per esempio copy *.* c:\windows o più semplicemente xcopy /?.
Ebbene questi parametri sono quelli che vanno a finire nell'array di stringhe che è parametro della funzione Main.

Possiamo cominciare a fare dei primi test e costruire un ciclo for per stampare l'elenco dei parametri in ingresso:


static void Main(string[] args)
{
for (int i=0;iConsole.WriteLine("Parametro: {0}",args);
}


Se lanciate in questo momento l'applicazione, non ci saranno parametri impostati e quindi non verrà stampato niente a schermo.
Andiamo quindi ad impostare dei parametri di test, dal Menù Project->Properties di Visual Studio .NET, e poi selezionate la cartella Configuration Properties->Debugging.
Inserite nella casella Command Line Arguments i seguente parametri: par1 par2 par3 come rappresentato qui sotto:

Impostazione dei parametri per la linea di comando
Impostazione dei parametri per la linea di comando


Ora è possibile lanciare per la prima volta il nostro programma.
L'output dovrebbe essere il seguente:

Il programma in esecuzione
Il programma in esecuzione


Input e Output - Console.ReadLine e Console.WriteLine
Come abbiamo detto precedentemente la classe Console ci mette a disposizione i metodi per interagire con l'utente e per raccogliere l'input da tastiera e rappresentare l'output delle nostre elaborazioni.
Vedremo qui di seguito quindi come utilizzare queste istruzioni.


Console.Write("Inserisci il tuo nome: ");
string nome=Console.ReadLine();

Console.Write("Inserisci il tuo cognome: ");
string cognome=Console.ReadLine();

Console.Write("Il tuo nome completo è : {0} {1}",nome,cognome);


Questo esempio non fa altro che stampare rispettivamente "Inserisci il tuo nome" e poi "Cognome" e prendere in Input dall'utente i dati che verranno inseriti nella due variabili di tipo stringa.
Per finire la Write stampera il nome completo a schermo.
Se andate a vedere nella guida del Framwork le funzioni Write e Writeline hanno diversi Overload proprio per stampare qualsiasi cosa (interi, long, stringhe, ecc.).
Come vedete il codice è molto semplice e comprensibile e apre scenari per eventuali estensioni e evoluzioni per programmi ben più complessi di questo, così come il deltree.exe o l'xcopy.exe.

Volendo potete controllare se fra i parametri in ingresso c'è n'è almeno uno di questo tipo "/?" oppure "/h" ed in caso positivo stampare a schermo la guida del comando oppure se sono usati più parametri incompatibili in combinazione arrestare il programma e segnalare gli errori all'utente.

Conclusioni
Come vedete anche in questo caso con poche istruzioni riuscite ad avere un'applicazione perfettamente funzionante. Anche se questo tipo di applicazioni non viene più usato dagli utenti comuni è una soluzione molto usata dagli amministratori di rete per automatizzare molte procedure, e quindi un'alternativa ai classici script.
Gli script sono molto flessibili ma anche loro hanno un limite. In questo modo potete spaziare e creare i vostri comandi ad hoc in modo che rispondano completamente alle vostre esigenze.
Voto medio articolo: 4.0 Numero Voti: 7

File allegati


90_cmdline.zip (7 Kbyte)
David De Giacomi

David De Giacomi

MVP Program Logo Approda al mondo dell'informatica nell' Aprile del 1994. Un amico gli fa conoscere il Quick Basic del DOS. E' cosi che inizia la sua attività di sviluppatore. Prosegue il suo percorso con altri linguaggi (Visual Basic, Pascal, Java, ANSI C), fino ad arrivare a .NET. Per un certo periodo affianca all'attività ... Profilo completo

Articoli collegati

Utilizzare NUnit per testare codice .NET
Scopriamo in questo articolo come utilizzare il popolare framework Open Source NUnit per effettuare Unit Testing del codice .NET aumentandone la qualità e riducendo il numero di eventuali bugs.
Autore: Michela Zangarelli | Difficoltà:
SQL Injection, che cosa è e come difendersi
I malintenzionati sono sempre dietro l'angolo. Il SQL Injection è una delle pratiche più semplici da utilizzare per attaccare un'applicazione poco sicura e violarla o arrecare danni al database. Vediamo che cos'è e come garantire la sicurezza delle applicazioni in modo adeguato.
Autore: Alessandro Alpi | Difficoltà: | Commenti: 4
Visual Studio 2005 Team System
Scopriamo il nuovo IDE di sviluppo che copre interamente l'intero ciclo di vita del software integrando in un solo ambiente più prodotti e studiato apposta per i ruoli di Architect, Developer e Tester.
Autore: Marco Caruso | Difficoltà: | Voto:
Tutorial ADO.NET ed esempi pratici - Parte 2
Dopo aver fatto un po' di teoria su ADO.NET nella Parte 1 dell'articolo procediamo con un Tutorial pratico che ci condurrà alla creazione di un'applicazione basilare che consenta l'accesso e la modifica dei dati su un Database Access.
Autore: Stefano Passatordi | Difficoltà: | Commenti: 10
Introduzione ad ADO.NET - Parte 1
ADO.NET è uno dei componenti chiave del .NET Framework. Eredita il nome dal vecchio ADO ma è praticamente quasi tutto cambiato. Una nuova architettura, nuovi concetti, nuove funzionalità e nuovi oggetti. Vediamo quali sono e a cosa servono.
Autore: Stefano Passatordi | Difficoltà: | Commenti: 6
Colonne calcolate e parola "Child" con ADO.NET
Una cosa utile di ADO.NET e' la possibilita di aggiungere ad una colonna da codice il cui valore sia il risultato di operazioni sui dati dei record (o tra valori di altre colonne). Quando si utilizza un dataset con piu tabelle collegate mediante relazioni invece, usando la parola chiave "child" si possono avere delle informazioni riguardanti le tabelle figlio, direttamente nei record della tabella
Autore: Matteo Raumer | Difficoltà: | Voto:
Usare degli indicatori di progresso con Query SQL
Nell'articolo vediamo come sia possibile con un l'aiuto delle classi DataReader e Command di ADO.NET, mostrare un indicatore di progresso che indichi lo stato di avanzamento di una query SQL durante il fetching dei dati.
Autore: Matteo Raumer | Difficoltà: | Voto:
La crittografia e la classe Rijndael
Vediamo come utilizzare una delle tante classi messe a disposizione dal .NET Framework per la crittografia dei dati. In particolare la classe Rijndael implementa un algoritmo di crittografia molto forte diventato famoso negli ultimi anni.
Autore: David De Giacomi | Difficoltà:
DES il famoso standard creato da IBM per la crittografia dei dati
In questo articolo dimostreremo come crittografare dei file usando il .NET Framework e in particolare la classe DESCryptoServiceProvider che implementa l'ormai noto algoritmo di cifratura inventato da IBM negli anni 70 chiamato DES (Data Encryption Standard)
Autore: David De Giacomi | Difficoltà: | Commenti: 2 | Voto:
Cosa sono e come funzionano le funzioni ricorsive?
Ecco tre esempi efficaci che vi spiegano come usare correttamente le funzioni ricorsive, per effettuare ricerche di file e cartelle all'interno del disco fisso, per ricostruire la struttura di un file XML oppure per svuotare determinati controlli in una Form.
Autore: Matteo Raumer | Difficoltà: | Commenti: 2
TextReader e TextWriter
Una panoramica su come utilizzare queste due classi che ci permettono di leggere e scrivere file di testo.
Autore: David De Giacomi | Difficoltà: | Commenti: 1 | Voto:
Giochiamo un po' con il registro di Windows!
Scopriamo uno degli elementi fondamentali del sistema operativo Windows e vediamo come è possibile accedervi tramite le classi offerte dal .NET Framework: Microsoft.Win32.Registry e Microsoft.Win32.RegistryKey
Autore: David De Giacomi | Difficoltà: | Commenti: 1 | Voto:
.NET Framework 1.1 Beta
Una prima panormaica sulle novità offerte dal Framework 1.1 che sarà integrato nella prossima versione di Visual Studio .NET 2003.
Autore: David De Giacomi | Difficoltà:
Cosa posso costruire con Visual Studio .NET ?
Un' introduzione sui vari tipi di progetto disponibili in Visual Studio dalle tipiche applicazioni Windows fino alle recenti applicazioni Web e agli innovativi Web Services.
Autore: David De Giacomi | Difficoltà: | Commenti: 1
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5