lunedì 12 giugno 2023

C# utilizzo della classe FileSystemWatcher per monitorare una cartella


In questo articolo vedremo come tramite un progetto di tipo “Windows Application” si effettua il monitoraggio di una cartella, nel visualizzare a video tutti i cambiamenti che possono avvenire in una determinata cartella.
Tramite la classe FileSystemWatcher, verifichiamo se in una determinata cartella determinata file oppure tutti, vengono modificati, aggiunti, creati, rinominati o altre operazioni che si possono fare sui file e sulla cartella stessa (per esempio creazione di sottocartella).
Questo può essere utile in quei programmi che devono controllare il contenuto di una cartella oppure nell’eventualità di fare dei backup o altra funzionalità da fare sui file e cartelle.
Il progetto sarà realizzato con l’ultima versione del Framework, che in questo momento in cui stiamo scrivendo è la 7, con l’ambiente di sviluppo “Visual Studio 2022 community” e per progetto di tipo “app Windows”.

Creazione del progetto

Si crea un nuovo progetto di tipo “App Windows Forms”, selezionando come versione del “Framework” la 7 ed impostando un nome di proprio gradimento.
Terminata la creazione del progetto, non resta che aggiungere al progetto una casella di testo, con il valore impostato a “True” per la proprietà “MultiLane” e per la proprietà “Name” impostata a “TxtLog”, e coprire quasi interamente l’area della form con la casella di testo, il tutto come mostrato in figura 1.

Figura 1 – La form con la casella di testo.

Terminata la creazione della form non resta che scrivere il codice.

Stesura del codice

Passiamo in visualizzazione codice per scrivere il codice che dovrà monitorare una determinata cartella.
Possiamo impostare alcune proprietà della classe “FileSystemWatcher” che permette di verificare solo alcuni file oppure tutti, ed anche dire se valutare le sottocartelle.
Dopo la definizione di classe e prima del costruttore, scriviamo una variabile di classe per la gestione delle cartella. Di seguito la dichiarazione delle suddette operazioni.

C#

//Seleziono tutti i file

FileSystemWatcher FswVerificaCartella = new("C:\\Varie\\", "*.*");


Come si vede dal frammento di codice precedente, nel costruttore vengono passati due parametri, il primo il percorso della cartella da monitorare, ed il secondo che tipo di file esaminare, in questo caso tutti, nell’eventualità che erano determinati casi, occorre mettere l’estensione tipo “*.jpg” .

Nel costruttore della form, occorre impostare le notifiche che bisogna ricevere sui vari file, il gestore di evento, che viene scatenato per ogni operazione che avviene nella cartella, ed altri parametri.
Di seguito il frammento di codice delle suddette operazioni.



C#

//tipo di notifica

FswVerificaCartella.NotifyFilter = NotifyFilters.LastWrite

                    | NotifyFilters.CreationTime

                    | NotifyFilters.FileName

                    | NotifyFilters.DirectoryName

                    | NotifyFilters.Attributes

                    | NotifyFilters.Size

                    | NotifyFilters.LastWrite

                    | NotifyFilters.LastAccess

                    | NotifyFilters.CreationTime | NotifyFilters.Security;

//Gestione eventi

FswVerificaCartella.Changed += FswVerificaCartella_Changed;

FswVerificaCartella.Created += FswVerificaCartella_Created;

FswVerificaCartella.Deleted += FswVerificaCartella_Deleted;

FswVerificaCartella.Error += FswVerificaCartella_Error;

FswVerificaCartella.Renamed += FswVerificaCartella_Renamed;

//Includere sottodirettory

FswVerificaCartella.IncludeSubdirectories = true;

//gestione eventi

FswVerificaCartella.EnableRaisingEvents = true;

 

Come si è visto dal frammento di codice precedente, viene effettuata la gestione delle notifiche sulle varie modifiche apportate nella cartella, quale, creazione, modifica, cambio di dimensione e tanto altro. 
Inoltre per tutti gli eventi a disposizione delle classe, quale la modifica, la creazione, cancellazione, rinomina ed eventuali errori, vengono gestiti nei vari metodi.
Infine il parametro “InludeSubdirectories” impostato a true, vuol dire che verifica anche le varie sottocartelle, mentre “EnableRaisingEvents” per tenere traccia e considerazione dei vari eventi.

Di seguito si riporta il frammento di codice completo nel costruttore della classe.

C#

public Form1()

        {

 

            try

            {

 

                //tipo di notifica

                FswVerificaCartella.NotifyFilter = NotifyFilters.LastWrite

                    | NotifyFilters.CreationTime

                    | NotifyFilters.FileName

                    | NotifyFilters.DirectoryName

                    | NotifyFilters.Attributes

                    | NotifyFilters.Size

                    | NotifyFilters.LastWrite

                    | NotifyFilters.LastAccess

                    | NotifyFilters.CreationTime | NotifyFilters.Security;

                //Gestione eventi

                FswVerificaCartella.Changed += FswVerificaCartella_Changed;

                FswVerificaCartella.Created += FswVerificaCartella_Created;

                FswVerificaCartella.Deleted += FswVerificaCartella_Deleted;

                FswVerificaCartella.Error += FswVerificaCartella_Error;

                FswVerificaCartella.Renamed += FswVerificaCartella_Renamed;

                //Includere sottodirettory

                FswVerificaCartella.IncludeSubdirectories = true;

                //gestione eventi

                FswVerificaCartella.EnableRaisingEvents = true;

 

                //FswVerificaCartella.Filter = "*.*";

 

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message);

            }

            InitializeComponent();

 

            TxtLog.Text = "Esecuzione analizza cartella.";

        }



Ora non resta che creare i vari gestori di evento per la classe.
Con l’evento “Renamed” possiamo intercettare quando un file ed una cartella vengono rinominati, verificare il nome originale e quello nuovo, tramite le proprietà “OldName” e “Name”.
Di seguito si riporta il frammento di codice delle suddette operazioni per l’evento “Renamed”


C#

private void FswVerificaCartella_Renamed(object sender, RenamedEventArgs e)

        {

 

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n Rinominato";

                TxtLog.Text += "\r\n Nome originario: " + e.OldName + " Percorso originario " + e.OldFullPath;

                TxtLog.Text += "\r\n nuovo nome " + e.Name + " Nuovo percorso " + e.FullPath;

            }));

        }


Per gestire eventuali eccezioni, si utilizza l’evento “Error” di seguito il frammento di codice.

C#

private void FswVerificaCartella_Error(object sender, ErrorEventArgs e)

        {

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n errore: " + e.GetException().Message;

            }));

 

        }


Tramite l’evento “Deleted”, possiamo gestire la situazione in cui viene cancellato un file o cartella, in tal caso verrà riportato il nome e percorso del file e cartella cancellato tramite la proprietà “FullPath”.
Di seguito il frammento di codice delle suddette operazioni.

C#

private void FswVerificaCartella_Deleted(object sender, FileSystemEventArgs e)

        {

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n cancellazione " + e.FullPath;

            }));

 

        }



L’evento “Created” ci permette di rilevare quando del percorso impostato viene creato un file oppure una sotto cartella, di seguito il frammento di codice per la gestione dell’evento “Created”.


C#

  private void FswVerificaCartella_Created(object sender, FileSystemEventArgs e)

        {

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n creazione : " + e.FullPath + " " + e.Name;

            }));

 

        }



Come per i precedenti eventi, la proprietà “fullPath” riporta il percorso completo e nome file che viene creato o sottocartella, mentre la proprietà “Name” il nome del file creato o solo il nome della sottocartella creata.
Infine siamo arrivati alla conclusione dell’articolo con l’ultimo metodo, quello relativo al cambiamento dei contenuti all’interno della cartella che abbiamo impostato nel costruttore.
Nell’evento “Changed” viene sollevato ogni qualvolta nella cartella avvengono cambiamenti, sia per i file e sia per le sottocartelle, cambiamenti che possono essere anche all’interno del file, come per esempio un file di videoscrittura, che viene salvato con nuove frasi.


C#

private void FswVerificaCartella_Changed(object sender, FileSystemEventArgs e)

        {

            if (e.ChangeType != WatcherChangeTypes.Changed)

                return;

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n" + "Cambiamento " + e.FullPath;

            }));

 

        }



Di seguito si riporta il frammento di codice completo di tutto l’articolo.


C#

  public partial class Form1 : Form

    {

        //Seleziono tutti i file

        FileSystemWatcher FswVerificaCartella = new("C:\\Varie\\", "*.*");

 

        public Form1()

        {

 

            try

            {

 

                //tipo di notifica

                FswVerificaCartella.NotifyFilter = NotifyFilters.LastWrite

                    | NotifyFilters.CreationTime

                    | NotifyFilters.FileName

                    | NotifyFilters.DirectoryName

                    | NotifyFilters.Attributes

                    | NotifyFilters.Size

                    | NotifyFilters.LastWrite

                    | NotifyFilters.LastAccess

                    | NotifyFilters.CreationTime | NotifyFilters.Security;

                //Gestione eventi

                FswVerificaCartella.Changed += FswVerificaCartella_Changed;

                FswVerificaCartella.Created += FswVerificaCartella_Created;

                FswVerificaCartella.Deleted += FswVerificaCartella_Deleted;

                FswVerificaCartella.Error += FswVerificaCartella_Error;

                FswVerificaCartella.Renamed += FswVerificaCartella_Renamed;

                //Includere sottodirettory

                FswVerificaCartella.IncludeSubdirectories = true;

                //gestione eventi

                FswVerificaCartella.EnableRaisingEvents = true;

 

                 

 

            }

            catch (Exception ex)

            {

                MessageBox.Show("Errore: " + ex.Message);

            }

            InitializeComponent();

 

            TxtLog.Text = "Esecuzione analizza cartella.";

        }

 

        private void BtnEsegui_Click(object sender, EventArgs e)

        {

 

        }

 

        private void FswVerificaCartella_Renamed(object sender, RenamedEventArgs e)

        {

 

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n Rinominato";

                TxtLog.Text += "\r\n Nome originario: " + e.OldName + " Percorso originario " + e.OldFullPath;

                TxtLog.Text += "\r\n nuovo nome " + e.Name + " Nuovo percorso " + e.FullPath;

            }));

        }

 

        private void FswVerificaCartella_Error(object sender, ErrorEventArgs e)

        {

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n errore: " + e.GetException().Message;

            }));

 

        }

 

        private void FswVerificaCartella_Deleted(object sender, FileSystemEventArgs e)

        {

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n cancellazione " + e.FullPath;

            }));

 

        }

 

        private void FswVerificaCartella_Created(object sender, FileSystemEventArgs e)

        {

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n creazione : " + e.FullPath + " " + e.Name;

            }));

 

        }

 

        private void FswVerificaCartella_Changed(object sender, FileSystemEventArgs e)

        {

            if (e.ChangeType != WatcherChangeTypes.Changed)

                return;

            TxtLog.Invoke(new Action(delegate ()

            {

                TxtLog.Text += "\r\n" + "Cambiamento " + e.FullPath;

            }));

 

        }

 

 

 

 

    }






Conclusioni

L’articolo ha voluto fornire al lettore l’utilizzo della classe “FileSystemWatcher” per gestire e monitorare tutto ciò che avviene all’interno di un determinato percorso o meglio cartella.
Classe che può tornare utile per aggiungere ai propri programmi funzionalità di salvataggio dati, come un backup, oppure aspetti di sicurezza nel gestire i propri programmi e file.
Le classi messe a disposizione del framework .Net sono notevoli e semplificano di molto lo sviluppo di applicazioni ai programmatori.
La classe ed i frammenti di codice si possono utilizzare anche per applicazioni di tipo “web”, oppure con versione di Framework precedente.

domenica 11 giugno 2023

Entity Framework Error Number:-2146893019 A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - Catena di certificati emessa da una Autorità di certificazione non disponibile nell'elenco locale.)

 


Durante la creazione di applicazioni con Entity Framework Core, può capitare che durante l'esecuzione del comando per la generazione delle classi per dal database Sql Server, si verifichi l'errore "Error Number:-2146893019 A connection was successfully established with the server, but then an error occurred during the login process. (provider: SSL Provider, error: 0 - Catena di certificati emessa da una Autorità di certificazione non disponibile nell'elenco locale.)".

Una delle possibili soluzioni è quella di inserire nella stringa di connessione, il parametro "TrustServerCertificate=True;" in modo di evitare le connessioni che non richiedono certificati.

Di seguito la stringa di connessione con il parametro indicato da utilizzare nella console "Nuget" per la creazione delle classi prendono spunto dalle tabelle del db.

PM=>Scaffold-DbContext "Server=NomeDBSqlServer;Database=NomeDatabase;TrustServerCertificate=True;Trusted_Connection=True;" 



sabato 10 giugno 2023

Download gioco PAYDAY 2

 



Un gioco per un pubblico maggiorenne con una grafica molto interessante ma anche con una giocabilità violenta.

Parliamo del gioco PayDay 2, uno sparatutto in lingua italiana e per sistemi operativi Windows.

Fino al 15 giugno 2023 il download è gratuito dopo tale data, sarà a pagamento, per maggiori informazioni e download visitate il seguente sito https://store.epicgames.com/it/p/payday-2-c66369

Framework blazor gratuito mudblazor

 

MudBlazor https://mudblazor.com/ è un Framework gratuito per ampliare con nuovi componenti lo sviluppo di applicazioni multipiattaforma tramite Blazor.

Nel sito è presente anche una valida guida esaustiva oltre che fornire un primo approccio a chi intende utilizzare questa serie di componenti per Blazor.

Per maggiori informazioni e download visitate il sito indicato.

venerdì 9 giugno 2023

strumento online gratuito per rimuovere le persone dalle foto

 


Un sito che fornisce un ottimo strumento online gratuito per rimuovere dalle proprie immagini e foto le persone.

Il sito https://tinywow.com/image/remove-person offre gratuitamente la possibilità di caricare delle immagine e selezionando le persone che non si vogliono tenere in foto le rimuove.

Il sito è gratuito e non richiede ne indirizzo email e ne registrazione.


giovedì 8 giugno 2023

alternativa a instagram

 


Il seguente sito https://pixelfed.org/ si pone come ottima alternativa a Instagram, permettendo di far parte di una comunità per condividere le proprie foto.

Per poter utilizzare il portale è necessario registrarsi gratuitamente.

mercoledì 7 giugno 2023

Alternativa a youtube

 


Il sito odysee è un portale simile a Youtube, con la caratteristica di rispettare la privacy e soprattutto limitando la pubblicità.

Il sito nasce con l intento di promuovere in maniera gratuita la condivisione di video.

Il sito è visibile qui  https://odysee.com/

martedì 6 giugno 2023

Download zeronet per navigare su internet in maniera anonima

 

Un software che vi permette di navigare in internet nascondendo il vostro ip, un modo per visitare siti che sono censurati o non raggiungibili da un determinato paese.

Il software ZeroNet, visibile qui https://zeronet.io/it in lingua italiana e per diversi sistemi operativi, permette di navigare liberi sulla rete.

Per maggiori informazioni e download visitate il sito indicato.

lunedì 5 giugno 2023

Strumento online per convertire file Excel in Pdf

Se cercate un sito che fornisce un servizio gratuito senza lasciare email e senza registrazione, per la conversione dei file da Excel a Pdf, il seguente link https://tinywow.com/converter/excel-to-pdf fornisce un valido convertitore di trasformazione file Excel.
Il sito è in lingua inglese ma facilmente utilizzabile.

domenica 4 giugno 2023

Framework per la realizzazione applicazioni multi piattaforma compose multiplatform

 


Il Framework Compose Multiplatform https://www.jetbrains.com/lp/compose-multiplatform/ della JetBrains, permette la creazione di applicazioni multipiattaforma utilizzando il linguaggio web HTML.

Il programmatore avrà possibilità di realizzare applicazioni per dispositivi mobile e desktop.

Per maggiori informazioni e download visitate il sito indicato.

sabato 3 giugno 2023

Download programma di antivirus gratuito clamav

 


Un antivirus gratuito ed open source ben fatto e che fornisce una protezione ai propri pc, parliamo di ClamAV, installabile su vari sistemi operativi, quali Windows, Linux e Mac.

Per il download e maggiori informazioni visitate il seguente sito https://www.clamav.net/

venerdì 2 giugno 2023

Download gioco Midnight Ghost Hunt

 



Un gioco di combattimento nei vesti di un fantasma questo è il gioco Midnight Ghost Hunt, disponibile in lingua italiana e per sistemi operativi Windows.

Il gioco offre una grafica molto interessante e buona giocabilità.

Fino al 8 giugno 2023 si potrà scaricare gratuitamente dopo tale data il download sarà a pagamento.

Per maggiori informazioni e download visitate il seguente sito Midnight Ghost Hunt | Acquistalo e scaricalo subito sull'Epic Games Store

Download Framework7 creazione di app multi piattaforma

 

Framework7, è un software gratuito ed open source per la programmazione multipiattaforma, mobile e desktop tramite HTML.

Tramite questo framework è possibile creare applicazioni per sistemi Android e IOS, oltre che desktop app.

Per il download e maggiori informazioni visitate il seguente sito https://framework7.io/

giovedì 1 giugno 2023

Asp.Net MVC Framework 5 pubblicare in una cartella anche i file web cshtml

 


Può capitare durante la fase di pubblicazione in Azure o altro ambiente di un progetto web realizzato con tecnologia Asp.Net MVC versione Framework 5.0,  che non vengono riportati  i file cshtml nella cartella dove si vuole pubblicare.

Una possibile soluzione è quella di aprire il file di progetto (.csproject) con Notepad, e inserire i seguenti nodi riportate qui di seguito,  sotto al nodo  <PropertyGroup>.


Di seguito i nodi da inserire:

<PreserveCompilationContext>true</PreserveCompilationContext>

<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>

<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>

Qui di seguito il nodo completo.


<PropertyGroup>

<TargetFramework>net5.0</TargetFramework>

<AspNetCoreHostingModel>InProcess</AspNetCoreHostingModel>

 <ApplicationIcon>wwwroot\favicon.ico</ApplicationIcon>

<PreserveCompilationContext>true</PreserveCompilationContext>

<MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>

<CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>

  </PropertyGroup>