Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
FIle System Watcher
giovedì 08 aprile 2004 - 09.53
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
zangief77
Profilo
| Newbie
8
messaggi | Data Invio:
gio 8 apr 2004 - 09:53
Salve,
ho realizzato un progetto di monitor folder, ovvero ho una applicazione che
mi monitorizza una cartella, quando nella cartella viene copiato un file
l'applicazione scatena degli eventi.
Il problema è che se faccio un handle all'evento Created quando il file
copiato è lungo gli eventi vengono scatenati prima che la copia sia
terminata, generando così errori nei passaggi successivi. Ho notato però che
se faccio l'handle all'evento Change questo evento viene generato 3 volte
prima che il file sia arrivato (un po' come mi rinnegherai tre volte prima
che il gallo canti!! visto che siamo in odore di pasqua!! :-) ) quindi in
OnChange inizializzo un contatore ed aspetto di aver contato fino a tre
prima di scatenare gli eventi. Mi rendo conto però che questo è un sistema
un po' troppo fittizio, infatti talvolta ho problemi se due file vengono
copiati in contemporanea o se faccio un trascinamento del file.
Come posso fare a trappare l'evento Created aspettando però la fine del file
prima di scatenare gli eventi?
Grazie
Gianni
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
gio 8 apr 2004 - 14:53
Ciao gianni,
è un interessante problema il tuo. Non hai per caso del codice da allegare in modo che provo a fare dei test anche io in modo da non dovermi riscrivere tutto per creare l'ambiente di test, perchè sono curioso anche io.
ciao
david
zangief77
Profilo
| Newbie
8
messaggi | Data Invio:
ven 9 apr 2004 - 01:14
Ok ti allego un progetto molto semplice ma utile a chiarire ciò di cui parlavo. Il progetto monitorizza una cartella che viene creata sul desktop di nome Monitor. Ti spiego cosa succede e quali sono i problemi. come vedi gestisco sia l'evento onchange che quello oncreated, ma ne utilizzo uno per volta commentando l'altro. Se trappo l'oncreated in qualsiasi modo venga inserito il file nella cartella (trascinandolo o copia incolla) viene riconosciuto l'evento ed infatti il nome del file compare nella txtbox. In questo caso però il mio problema è che la mia monitor folder monitorizza eventuali video che arrivano nella cartella per far partire un processo di analisi e codifica. Quindi visto che l'evento vieno trappato appena il file arriva nella cartella e non quando è completamente copiato, la ia analisi inizia su un file incompleto generando quindi errori. Mi sono accorto quindi che se gestisco l'evento oncreated questo viene generato tre volte prima che il file sia completamente arrivato. Quindi con un semplice contatore pensavo di aver risolto il problema. Non è così perchè in questo caso il progetto risulata insensible ai trascinamenti di file che già staveno nella cartella. Ad esempio prendo un file di prova lo copio nella monitorfold, tutto ok, risposto il file sul desktop e lo trascino nuovamente nella monitorfold, il file a questo punto non viene riconosciuto. Oltretutto con questo metodo ho dei problemi se copio più file per volta.
Quindi io vorrei riconoscere immediatamente quando un file viene copiato nella monfold ma aspettare che sia completamente copiato prima di scatenare degli eventi. Sperando di essere stato chiaro ti ringrazio in anticipo per l'interesse.
Ciao
Giani
Brainkiller
Profilo
| Guru
7.999
messaggi | Data Invio:
ven 9 apr 2004 - 21:10
Ciao Gianni,
mi spiace dirti che il tuo codice funziona perfettamente !
E quindi il problema è forse altrove. Ho provato a copiare nella cartella monitor file di varie dimensioni e l'evento si scatena solo (sul mio PC) al termine della copia del file.
Ho provato anche con un file di 120 mega. Mentre Windows visualizza il trasferimento in corso nella textbox non si vede niente, quando è terminato il trasferimento e scompare la finestrella di Windows automaticamente compare il nome del file dentro la textbox.
Questo mi sembra è quello che vuoi tu, a me funziona alla perfezione.
E il problema dove sarà ? Hai avuto modo di testarlo su altri PC ?
ciao
david
zangief77
Profilo
| Newbie
8
messaggi | Data Invio:
sab 10 apr 2004 - 10:46
Scusa, probabilmente il mio msg fiume non era tanto chiaro, se apri il codice vedi che c'è sia la funzione OnChange che OnCreate, ma nella OnCreate il codice è commentato. La OnChange funziona con il contatore dei tre eventi e funziona piuttosto bene, il problema con qesto metodo si verifica se nella cartella trascini un file che era già presente, se vuoi puoi fare questo tentativo, metti un file nella cartella, avvia il programma, trascina il file dalla cartella al desktop e poi ritrascinalo nella cartella. Tal volta l'evento non viene trappato. Se invece commenti il codice nella OnChange e riattivi quello nella OnCreate vedrai che gli eventi vengono scatenati appena il file arriva nella cartella. Scusa se vado a cercare ilpelo nell'uovo, ma il progetto mi serve per la tesi e vorrei evitare che in sede di presentazione qualcosa andasse storto! Comunque ho ovviato al problema, gestendo l'evento OnCreate ma facendo un controllo IsInUse del file prima di far partire l'analisi. Quindi il file viene segnato come arrivato anche se non è stato copiato in toto, ma l'analisi,non aveno accesso esclusivo al file, non parte finchè la copia non è terminata.
Grazie per la pazienza ed il tempo che mi hai dedicato
Saluti
Gianni
Torna su
Stanze Forum
Elenco Threads
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 !