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:
Posta un commento