Leggere cartelle ad intervalli regolari

martedì 17 febbraio 2015 - 09.47
Tag Elenco Tags  C#  |  .NET 4.0

svipla Profilo | Senior Member

Ciao a tutti
devo creare un'applicazione che deve leggere da delle cartelle ogni 5 minuti.
1- che tipo di progetto devo creare? Web service?
2- come faccio a leggere o scrivere file in ftp?

Penso che dovrei creare un'applicazione come servizio windows che mi permetta di accedere in ftp alle cartelle.
Grazie

Davide1986 Profilo | Junior Member

Io farei un servizio (c#) che monitorizzi la cartella o le cartelle, sfrutterei la proprietà di FileSystemWatcher :

Questo componente è in grado di gestire quattro eventi che vengono generati a seconda dei cambiamenti che avvengono nella cartella monitorata:

Created – Generato quando una cartella o un file vengono creati
Deleted - Generato quando una cartella o un file vengono cancellati
Renamed - Generato quando una cartella o un file vengono rinominati
Changed - Generato quando gli attributi di una cartella o di un file vengono modificati

Link utili :
http://devproconnections.com/net-framework/how-build-folder-watcher-service-c
http://www.codeproject.com/Articles/18521/How-to-implement-a-simple-filewatcher-Windows-serv
http://www.mrwebmaster.it/csharp/utilizzo-componente-filesystemwatcher-net_7772.html

Extending FileSystemWatcher to ASP.NET
http://www.developerfusion.com/article/84362/extending-filesystemwatcher-to-aspnet/

Saluti Davide,

P.S. : Se incontri difficoltà scrivi e se posso ti aiuto volentieri.

Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it

svipla Profilo | Senior Member

ciao e grazie
ma se volessi farlo a intervalli regolari?
Grazie

Davide1986 Profilo | Junior Member

Puoi usare l'oggetto System.Threading.Timer dove fai avviare un metodo o funzione ogni X Ore/Minuti/Secondi.

Per prima cosa questa cartella dove si trova? In locale o in remoto?

Se la cartella è in remoto, con quale protocollo ti vuoi collegare?

Bozza codice da modificare :

var timer = new System.Threading.Timer((e) => { MyMethod(); }, null, 0, TimeSpan.FromMinutes(5).TotalMilliseconds);

Link Utili :
http://stackoverflow.com/questions/4329859/how-to-call-function-on-timer-asp-net-mvc
https://msdn.microsoft.com/it-it/library/system.threading.timer(v=vs.110).aspx
http://www.dotnetperls.com/timer

RUNNING A BACKGROUND THREAD INSIDE AN ASP.NET WEBSITE
http://labs.bjfocus.co.uk/2014/07/running-a-background-task-inside-an-asp-net-website/

Saluti Davide,

P.S. Tu come la pensavi? Come la volevi strutturare?Qual'è il tuo dubbio?


Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it

svipla Profilo | Senior Member

Ciao
La cartella si trova sul mio server, ma vorrei accedere in ftp.

Davide1986 Profilo | Junior Member

Qual'è il tuo obiettivo? Nel senso che devi fare?

Ti serve solo leggere la lista dei File e Directory via FTP?

Ti serve poter creare Directory via FTP?

Ti serve poter aggiungere ed eliminare un File o Directory tramite FTP?

Per ogni azione devi crearti un metodo che invii un comando ben preciso al Server FTP...

Questa è la classe che ti serve usare :
https://msdn.microsoft.com/it-it/library/system.net.webrequestmethods.ftp%28v=vs.110%29.aspx

Qui puoi prendere spunto le classi

/* Upload a File */
/* Download a File */
/* Delete a File */
/* Rename a File */
/* Create a New Directory */
ecc..

Link : http://www.codeproject.com/Tips/443588/Simple-Csharp-FTP-Class

Se ti può servire per prendere spunto ti allego il codice per avere la lista dei File e Directory del Server FTP.

Ho creato una Classe libFTP :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Esempio di come richiamare la lista dei file/directory :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Se si volesse avere anche la lista dei file contenuti nelle SubDirectory dobbiamo scrivere in questa maniera :

Il codice sorgente non è stato renderizzato qui
perchè non c'è sufficiente spazio.
Clicca qui per visualizzarlo in una nuova finestra

Saluti Davide,

Blog ImaginSystems
http://blogs.dotnethell.it/imaginsystems
http://www.imaginsystems.it
http://www.alpacasrl.it
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5