mercoledì 12 agosto 2026

FT: Buone vacanze a tutti voi

 

Buone vacanze da un programmatore

Quest'anno, dopo un lungo periodo, non farò le meritate vacanze. Tanto lavoro, infatti, in un nuovo progetto nel quale finalmente torno a sviluppare con C# in ambiente Windows Forms.

In questo primo giro di boa, come si dice in questi casi, posso ritenermi molto fortunato e, soprattutto, soddisfatto di come è andato questo primo semestre.

Ritornato dal periodo americano, in particolare dopo diversi mesi trascorsi a Boston, una nuova avventura mi ha assorbito e, soprattutto, mi ha fatto ritrovare la voglia di tornare a quello che facevo prima: lo sviluppatore .NET.

Un progetto molto interessante, dal quale mi sto togliendo davvero molte soddisfazioni.

Se da una parte ho tolto spazio all'attività di apprendimento della lingua inglese, dall'altra ho continuato a curare il mio spazio su GitHub, con la pubblicazione di alcuni progetti, che potete visitare a questo indirizzo:

GitHub – Emanuele2025

Un altro aspetto importante di questi mesi è stato vedere sempre più concretamente l'utilizzo dell'intelligenza artificiale come assistente nello sviluppo software.

Uno strumento che mi sta davvero aiutando e che, giorno dopo giorno, sta diventando sempre più presente nel mio modo di lavorare.

In questi mesi anche il blog mi ha dato molte soddisfazioni, superando i ben due milioni di visitatori, un traguardo per me molto significativo.

Certo, per alcuni i numeri possono contare poco o nulla, ma sapere che il blog continua a essere seguito, nonostante l'intelligenza artificiale stia inevitabilmente togliendo traffico a molti siti web, è comunque una cosa che fa molto piacere.

Con la testa rivolta alla città di Boston, auguro a tutti voi di trascorrere delle serene e gioiose vacanze.

Ritornerò a settembre con nuovo materiale tecnologico, nuove esperienze da raccontare e, chissà, magari anche con la speranza di poter dare presto notizia dell'uscita di Windows 12.

Buone vacanze a tutti voi, cari lettori!


lunedì 10 agosto 2026

C# Windows Forms: visualizzare una finestra di dialogo per salvare un file

In questo esempio, realizzato in C# e nell'ambiente Windows Forms, vedremo come visualizzare una finestra di dialogo che consenta all'utente di scegliere il percorso e il nome del file da salvare.

A tale scopo possiamo utilizzare la classe SaveFileDialog, disponibile nel framework .NET.

Di seguito viene riportato un semplice esempio di utilizzo.

C#

using (SaveFileDialog sfdSalvaFile = new SaveFileDialog())

{

    //Filtro solo per il formato pdf o docx formato di salvataggio

    sfdSalvaFile.Filter = "Pdf (*.Pdf)|*.Pdf|Word (*.docx)|*.docx";

    sfdSalvaFile.FilterIndex = 1;

 

    //Imposto di default il nome file

    sfdSalvaFile.FileName = "mioFile.pdf";

 

    //Imposto la cartella iniziale da visualizzare nella finestra

    sfdSalvaFile.InitialDirectory = @"C:\";

    byte[] dati = GetDati();  

    //Visualizzo la finestra di salvataggio, se è ok salvo

    if (sfdSalvaFile.ShowDialog() == DialogResult.OK)

    {

        string percorso = sfdSalvaFile.FileName;

                   

        File.WriteAllBytes(percorso , dati);

                   

    }

}


domenica 9 agosto 2026

Come leggere e importare file VCF in C# senza librerie di terze parti

In questo esempio, realizzato in  C# per l'ambiente Windows Forms , vedremo come estrarre le informazioni contenute nei file di tipo  VCF (vCard) , utilizzati per rappresentare e scambiare i dati dei contatti, anche tramite applicazioni come Outlook.

L'obiettivo è leggere i file VCF presenti all'interno di una cartella, estrarre alcune informazioni del contatto, come nome, indirizzo e-mail e note , e visualizzarle successivamente all'interno di un controllo `DataGridView`.

Il tutto viene realizzato tramite una classe personalizzata, senza utilizzare librerie di terze parti.

La classe `DtoContattiVcf` rappresenta il singolo contatto e contiene le proprietà `Nome`, `Email` e `Note`.

Il metodo `Contatti()` si occupa invece di individuare tutti i file `.vcf` presenti nella cartella specificata e di creare un oggetto `DtoContattiVcf` per ciascun file.



C#

    public class DtoContattiVcf

    {

        public string Nome { get; set; } = string.Empty;

 

        public string Email { get; set; } = string.Empty;

 

        public string Note { get; set; } = string.Empty;

 

        public DtoContattiVcf()

        {

        }

 

        public DtoContattiVcf(string percorsoNomeFile)

        {

            if (!File.Exists(percorsoNomeFile))

            {

                return;

            }

 

            string[] lines = File.ReadAllLines(percorsoNomeFile);

 

            foreach (string line in lines)

            {

                if (line.StartsWith("FN:", StringComparison.OrdinalIgnoreCase))

                {

                    Nome = line.Substring(3).Trim();

                }

                else if (line.StartsWith("EMAIL;", StringComparison.OrdinalIgnoreCase))

                {

                    int posizione = line.IndexOf(':');

 

                    if (posizione >= 0)

                    {

                        Email = line.Substring(posizione + 1).Trim();

                    }

                }

                else if (line.StartsWith("NOTE;", StringComparison.OrdinalIgnoreCase))

                {

                    int posizione = line.IndexOf(':');

 

                    if (posizione >= 0)

                    {

                        Note = line.Substring(posizione + 1).Trim();

                    }

                }

            }

        }

 

        public List<DtoContattiVcf> Contatti(string percorsoFilesVcf)

        {

            List<DtoContattiVcf> returnContatti = new List<DtoContattiVcf>();

 

            if (!Directory.Exists(percorsoFilesVcf))

            {

                return returnContatti;

            }

 

            foreach (string fileVcf in Directory.EnumerateFiles(

                percorsoFilesVcf,

                "*.vcf",

                SearchOption.TopDirectoryOnly))

            {

                try

                {

                    DtoContattiVcf contatto = new DtoContattiVcf(fileVcf);

 

                    returnContatti.Add(contatto);

                }

                catch (IOException)

                {

                    

                    continue;

                }

                catch (UnauthorizedAccessException)

                {

                   

                    continue;

                }

            }

 

            return returnContatti;

        }

    }

 



Una volta definita la classe, possiamo utilizzarla all'interno del codice di una form Windows Forms.

Nell'esempio seguente, il percorso della cartella contenente i file VCF viene recuperato da una `TextBox`. I contatti vengono quindi letti e associati al controllo `DataGridView`.


C#


private void BtnRilevaVCF_Click(object sender, EventArgs e)
{
    Cursor.Current = Cursors.WaitCursor;
    try
    {
        string percorso = TxtPercorsoVCF.Text.Trim();

        if (string.IsNullOrWhiteSpace(percorso))
        {
            Utility.MessaggioInfo(
                "Selezionare la cartella contenente i file VCF.");

            return;
        }

        if (!Directory.Exists(percorso))
        {
            Utility.MessaggioInfo(
                "La cartella selezionata non esiste.");

            return;
        }

        DtoContattiVcf contatti = new DtoContattiVcf();

        List<DtoContattiVcf> listaContatti = contatti.Contatti(percorso);

        if (listaContatti.Count == 0)
        {
            Utility.MessaggioInfo(
                "Nessun file VCF presente nella cartella selezionata.");

            return;
        }

        dtgDatiVcf.DataSource = listaContatti;


    }
    catch (Exception ex)
    {
        Utility.MessaggioErrore(ex.Message);
    }
    finally
    {
        Cursor.Current = Cursors.Default;

    }
}