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;

    }
}

Nessun commento: