+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 4 su 4

Generare un evento se in una directory il file esiste

  1. #1
    nightingales non è in linea Novello
    il programma deve generare un evento quando in una precisa directory esiste un preciso file

    esiste già un evento che mi consenta questo
    altrimenti come si fa a crearlo da zero
    negli esempi di msdn non c' ho capito nulla

    grazie dell' aiuto

  2. #2
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Ciao nightingales, ben arrivato sul forum. L'evento che dici, se ho ben capito, devi fartelo tu. Puoi effettuare una scansione temporizzata della directory e generare l'evento se il file vi è contenuto, oppure puoi lasciare che sia uno watchfolder (o come si chiama) ad avvertirti dell'arrivo di un nuovo file, così che dopo un esame iniziale non hai bisogno di ciclare in 'polling' sulla directory, ma solo esaminare se il nuovo arrivato è quello che ti aspetti. Non ricordo bene le funzioni dello watchfolder, ma penso ti avverta anche di un cambiamento di nome. Lo dico nel caso che il tuo file 'arrivi' in quanto uno preesistente viene rinominato con il nome di quello che tu stai aspettando. Tieni presente che anzichè generare un evento, potresti anche chiamare direttamente una procedura, visto che tanto è il tuo codice ad accorgersi dell'arrivo del file e quindi puoi scegliere se scatenare l'evento, oppure chiamare direttamente una procedura che contenga lo stesso codice che avresti voluto inserire nella routine di gestione dell'evento.
    ℹ️ Leggi di più su alextyx ...

  3. #3
    L'avatar di Cteniza
    Cteniza non è in linea Amanuense
    Guarda la classe FileSystemWatcher
    Ti metto un esempio presente nel .sdk presente solo in c# che ho tradotto in vb.net
    Imports System
    Imports System.IO
    
    Public Class Watcher
    
    	Public Shared Sub Main(ByVal args As String())
    		If args.Length < 1 Then
    			Console.WriteLine("Usage: Watcher.exe <directory>")
    		Else
    			Dim watcher As FileSystemWatcher = New FileSystemWatcher
    			watcher.Path = args(0)
    			watcher.NotifyFilter = NotifyFilters.FileName Or NotifyFilters.Attributes Or NotifyFilters.LastAccess Or NotifyFilters.LastWrite Or NotifyFilters.Security Or NotifyFilters.Size
    			AddHandler watcher.Changed, AddressOf OnChanged
    			AddHandler watcher.Created, AddressOf OnChanged
    			AddHandler watcher.Deleted, AddressOf OnChanged
    			AddHandler watcher.Renamed, AddressOf OnRenamed
    			watcher.EnableRaisingEvents = True
    		End If
    		Console.WriteLine("Press Enter to quit the sample" & Microsoft.VisualBasic.Chr(13) & "" & Microsoft.VisualBasic.Chr(10) & "")
    		Console.ReadLine
    	End Sub
    
    	Public Shared Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
    		Console.WriteLine("File: {0} {1}", e.FullPath, e.ChangeType.ToString("G"))
    	End Sub
    
    	Public Shared Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
    		Console.WriteLine("File: {0} Renamed to {1}", e.OldFullPath, e.FullPath)
    	End Sub
    End Class
    
    Mi correggo: esiste anche uno dei 101 esempi che dimostra questa cosa:
    Samples\File - How-To File Notifications
    Ultima modifica di Cteniza; 22-02-2006 08:37 

  4. #4
    L'avatar di alextyx
    alextyx non è in linea Moderatore Globale
    Cteniza ti ha già fornito il nome giusto (non era watchfolder!). Stamani, nella mia abituale sessione di acculturamento (in bagno), ho fatto una veloce ricerca x rinfrescarmi la idee e completare la risposta....ma arrivo secondo!
    Ho visto che puoi usarlo per accorgerti di vari eventi che avvengono nella cartella e che puoi dirgli su che tipi di file tenere gli occhi puntati (es. *.txt).
    Comunque il codice di Cteniza e un'occhiata alla guida on line, dovrebbero darti le informazioni che servono. Casomai, mi preme segnalarti un paio di cosette che potrebbero servirti. Dal momento che gli eventi scatenati da un thread, girano in quel thread, anche se il codice dei tuoi gestori di evento ce lo hai nella tua form, tieni presente che un eventuale accesso ai controlli della form dovrebbe essere sincronizzato. Se trascini il controllo filesystemwatcher dalla barra degli strumenti su di una form, automaticamente il codice dei gestori di evento del fsw, girerà nello stesso thread della form, evitando potenziali problemi. L'altra trappoletta in cui si può cadere (questa ci è successa proprio qualche mese fa), è il tentare di aprire un file appena arrivato senza alcuna precauzione. Specialmente con file di dimensioni ragguardevoli, potresti avere la segnalazione dell'arrivo del file prima che esso sia completamente disponibile all'apertura, quindi conviene sempre tentare l'apertura in un try catch e casomai riprovare più tardi! Spero di non aver detto troppe castronerie, ma il mio 'studio' mattutino è stato molto frettoloso
    ℹ️ Leggi di più su alextyx ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. generare una directory da access
    Da gianbruno nel forum Microsoft Access
    Risposte: 5
    Ultimo Post: 26-11-2011, 00:39
  2. Risposte: 12
    Ultimo Post: 04-07-2011, 22:11
  3. Generare evento su più pulsanti appena creati
    Da Andrea1975 nel forum Visual Basic .Net
    Risposte: 4
    Ultimo Post: 20-02-2009, 20:49
  4. Generare evento su controllo generato dinamicamente
    Da massimo74rn nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 06-01-2009, 17:15
  5. Evento Form Closing per i Thread, ESISTE ?
    Da andrea(gmail) nel forum Visual Basic .Net
    Risposte: 3
    Ultimo Post: 29-11-2008, 11:46