OVH Cloud OVH Cloud

connaitre un evenement fichier ?

10 réponses
Avatar
Bonjour,

je dois faire une appli ( surement un service d'ailleurs) qui dois m'informé
des fichiers qui vienne d'etre modifié !

la fin de l'exemple je l'ai.
Mais il faut que je recup un evenement de windows pour connaitre quel
fichier vient de changer ? ou d'apparaitre !
Vers ou chercher ? un exemple ? bref je suis preneur de tout !


exemple concret :
des graphistes vont sauver des images dans un repertoire du disk !
Je dois recuperer cette image, enfin du moins le chemin pour pouvoir lancer
une appli en ligne de commande qui va generer dans un autre repertoire une
vignette de celle-ci !

10 réponses

Avatar
TroXsA
Salut !
Voila ce que j'ai pu toruvé :)
***************************************************************************************************
Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String = "*")
'On peut utiliser les '*' avec sFilter
Dim fw As New FileSystemWatcher(sPath, sFilter)
'On ajoute les handler pour surveiller les évènements qu'on souhaite.
AddHandler fw.Changed, AddressOf OnChanged
AddHandler fw.Renamed, AddressOf OnRenamed
AddHandler fw.Created, AddressOf OnChanged
AddHandler fw.Deleted, AddressOf OnChanged
AddHandler fw.Error, AddressOf OnError
'On surveillera aussi les sous répertoires
fw.IncludeSubdirectories = True
' Mettre cette propriété à True démarre la surveillance des modification. La
mettre à false l'arrête.
' Dans notre exemple, elle sera à true durant tout le programme
fw.EnableRaisingEvents = True
End Sub
Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType)
End Sub
Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs)
Dim ex As Exception = e.GetException()
Debug.WriteLine(ex.ToString())
Console.WriteLine(ex.Message)
End Sub
***************************************************************************************************
'Dans un thread
Watch("c:*.*")
***************************************************************************************************

J'espere que c'est ce que tu recherchais :)

@+
Avatar
ca à l'air de correspondre mais j'ai une erreur avec
FileSystemWatcher

doit falloir faire un import de quelques choses non ?



"TroXsA" a écrit dans le message de news:
ddckbe$o7h$
Salut !
Voila ce que j'ai pu toruvé :)
***************************************************************************************************
Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String = "*")
'On peut utiliser les '*' avec sFilter
Dim fw As New FileSystemWatcher(sPath, sFilter)
'On ajoute les handler pour surveiller les évènements qu'on souhaite.
AddHandler fw.Changed, AddressOf OnChanged
AddHandler fw.Renamed, AddressOf OnRenamed
AddHandler fw.Created, AddressOf OnChanged
AddHandler fw.Deleted, AddressOf OnChanged
AddHandler fw.Error, AddressOf OnError
'On surveillera aussi les sous répertoires
fw.IncludeSubdirectories = True
' Mettre cette propriété à True démarre la surveillance des modification.
La mettre à false l'arrête.
' Dans notre exemple, elle sera à true durant tout le programme
fw.EnableRaisingEvents = True
End Sub
Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType)
End Sub
Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs)
Dim ex As Exception = e.GetException()
Debug.WriteLine(ex.ToString())
Console.WriteLine(ex.Message)
End Sub
***************************************************************************************************
'Dans un thread
Watch("c:*.*")
***************************************************************************************************

J'espere que c'est ce que tu recherchais :)

@+



Avatar
TroXsA
Oui :)
Imports System.IO
c'est tout !

a écrit dans le message de news:

ca à l'air de correspondre mais j'ai une erreur avec
FileSystemWatcher

doit falloir faire un import de quelques choses non ?



"TroXsA" a écrit dans le message de news:
ddckbe$o7h$
Salut !
Voila ce que j'ai pu toruvé :)
***************************************************************************************************
Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String = "*")
'On peut utiliser les '*' avec sFilter
Dim fw As New FileSystemWatcher(sPath, sFilter)
'On ajoute les handler pour surveiller les évènements qu'on souhaite.
AddHandler fw.Changed, AddressOf OnChanged
AddHandler fw.Renamed, AddressOf OnRenamed
AddHandler fw.Created, AddressOf OnChanged
AddHandler fw.Deleted, AddressOf OnChanged
AddHandler fw.Error, AddressOf OnError
'On surveillera aussi les sous répertoires
fw.IncludeSubdirectories = True
' Mettre cette propriété à True démarre la surveillance des modification.
La mettre à false l'arrête.
' Dans notre exemple, elle sera à true durant tout le programme
fw.EnableRaisingEvents = True
End Sub
Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType)
End Sub
Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs)
Dim ex As Exception = e.GetException()
Debug.WriteLine(ex.ToString())
Console.WriteLine(ex.Message)
End Sub
***************************************************************************************************
'Dans un thread
Watch("c:*.*")
***************************************************************************************************

J'espere que c'est ce que tu recherchais :)

@+







Avatar
oui je l'avais trouvé en fait !
ca à l'air d'etre bon
mais avec cet appel Watch("c:,","*.*")

toutefois le prog sort directement
il faudrait que je puisse savoir quand un fichier à été changé dans cette
arbo + sous arbo ?

bon j'ai donc fait ca, mais la boucle prend 100% du cpu
et repete la derniere action indefiniment ?
as tu une meilleure maniere de proceder ?
Sub main()
Dim a As Int16
a = 0
While (a = 0)
Watch("d:", "*.*")
End While
End Sub






"TroXsA" a écrit dans le message de news:
ddcvvk$uu7$
Oui :)
Imports System.IO
c'est tout !

a écrit dans le message de news:

ca à l'air de correspondre mais j'ai une erreur avec
FileSystemWatcher

doit falloir faire un import de quelques choses non ?



"TroXsA" a écrit dans le message de news:
ddckbe$o7h$
Salut !
Voila ce que j'ai pu toruvé :)
***************************************************************************************************
Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String = "*")
'On peut utiliser les '*' avec sFilter
Dim fw As New FileSystemWatcher(sPath, sFilter)
'On ajoute les handler pour surveiller les évènements qu'on souhaite.
AddHandler fw.Changed, AddressOf OnChanged
AddHandler fw.Renamed, AddressOf OnRenamed
AddHandler fw.Created, AddressOf OnChanged
AddHandler fw.Deleted, AddressOf OnChanged
AddHandler fw.Error, AddressOf OnError
'On surveillera aussi les sous répertoires
fw.IncludeSubdirectories = True
' Mettre cette propriété à True démarre la surveillance des
modification. La mettre à false l'arrête.
' Dans notre exemple, elle sera à true durant tout le programme
fw.EnableRaisingEvents = True
End Sub
Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType)
End Sub
Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs)
Dim ex As Exception = e.GetException()
Debug.WriteLine(ex.ToString())
Console.WriteLine(ex.Message)
End Sub
***************************************************************************************************
'Dans un thread
Watch("c:*.*")
***************************************************************************************************

J'espere que c'est ce que tu recherchais :)

@+











Avatar
TroXsA
Comme j'avais dit :) dans un threading ou thread
et tout ce passera bien

Dim t as New System.threading.Thread(OfAdress nom de ta procedure)
fait des rechercher sur le net et tu veras il y en a plein :)

ça ne prendra plus les 100 % de CPU






"TroXsA" a écrit dans le message de news:
ddcvvk$uu7$
Oui :)
Imports System.IO
c'est tout !

a écrit dans le message de news:

ca à l'air de correspondre mais j'ai une erreur avec
FileSystemWatcher

doit falloir faire un import de quelques choses non ?



"TroXsA" a écrit dans le message de news:
ddckbe$o7h$
Salut !
Voila ce que j'ai pu toruvé :)
***************************************************************************************************
Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String =
"*")
'On peut utiliser les '*' avec sFilter
Dim fw As New FileSystemWatcher(sPath, sFilter)
'On ajoute les handler pour surveiller les évènements qu'on souhaite.
AddHandler fw.Changed, AddressOf OnChanged
AddHandler fw.Renamed, AddressOf OnRenamed
AddHandler fw.Created, AddressOf OnChanged
AddHandler fw.Deleted, AddressOf OnChanged
AddHandler fw.Error, AddressOf OnError
'On surveillera aussi les sous répertoires
fw.IncludeSubdirectories = True
' Mettre cette propriété à True démarre la surveillance des
modification. La mettre à false l'arrête.
' Dans notre exemple, elle sera à true durant tout le programme
fw.EnableRaisingEvents = True
End Sub
Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType)
End Sub
Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File {0} renamed to {1}", e.OldFullPath, e.FullPath)
End Sub
Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs)
Dim ex As Exception = e.GetException()
Debug.WriteLine(ex.ToString())
Console.WriteLine(ex.Message)
End Sub
***************************************************************************************************
'Dans un thread
Watch("c:*.*")
***************************************************************************************************

J'espere que c'est ce que tu recherchais :)

@+















Avatar
j'ai bien fait ça ? mais marche pô !!
il me renvoi cette erreur je pige plus ?
j'arrive pas à passer les arguments !!

Dim myThread As System.Threading.Thread
myThread = New System.Threading.Thread(AddressOf Watch("d:temp"))
myThread.Start()


La méthode 'Public Sub Watch(sPath As String, [sFilter As String = "*"])'
n'a pas la même signature que le délégué 'Delegate Sub ThreadStart()'.



"TroXsA" a écrit dans le message de news:
ddd260$hm$

Comme j'avais dit :) dans un threading ou thread
et tout ce passera bien

Dim t as New System.threading.Thread(OfAdress nom de ta procedure)
fait des rechercher sur le net et tu veras il y en a plein :)

ça ne prendra plus les 100 % de CPU






"TroXsA" a écrit dans le message de news:
ddcvvk$uu7$
Oui :)
Imports System.IO
c'est tout !

a écrit dans le message de news:

ca à l'air de correspondre mais j'ai une erreur avec
FileSystemWatcher

doit falloir faire un import de quelques choses non ?



"TroXsA" a écrit dans le message de news:
ddckbe$o7h$
Salut !
Voila ce que j'ai pu toruvé :)
***************************************************************************************************
Sub Watch(ByVal sPath As String, Optional ByVal sFilter As String =
"*")
'On peut utiliser les '*' avec sFilter
Dim fw As New FileSystemWatcher(sPath, sFilter)
'On ajoute les handler pour surveiller les évènements qu'on souhaite.
AddHandler fw.Changed, AddressOf OnChanged
AddHandler fw.Renamed, AddressOf OnRenamed
AddHandler fw.Created, AddressOf OnChanged
AddHandler fw.Deleted, AddressOf OnChanged
AddHandler fw.Error, AddressOf OnError
'On surveillera aussi les sous répertoires
fw.IncludeSubdirectories = True
' Mettre cette propriété à True démarre la surveillance des
modification. La mettre à false l'arrête.
' Dans notre exemple, elle sera à true durant tout le programme
fw.EnableRaisingEvents = True
End Sub
Sub OnChanged(ByVal source As Object, ByVal e As FileSystemEventArgs)
Console.WriteLine("File {0} {1}", e.FullPath, e.ChangeType)
End Sub
Sub OnRenamed(ByVal source As Object, ByVal e As RenamedEventArgs)
Console.WriteLine("File {0} renamed to {1}", e.OldFullPath,
e.FullPath)
End Sub
Sub OnError(ByVal source As Object, ByVal e As ErrorEventArgs)
Dim ex As Exception = e.GetException()
Debug.WriteLine(ex.ToString())
Console.WriteLine(ex.Message)
End Sub
***************************************************************************************************
'Dans un thread
Watch("c:*.*")
***************************************************************************************************

J'espere que c'est ce que tu recherchais :)

@+



















Avatar
TroXsA
Non c'est pas comme ça ;)

Dim myThread As System.Threading.Thread
myThread = New System.Threading.Thread(AddressOf WatchThread)
myThread.Start()

Sub WatchThread
Watch("d:temp")
End Sub
Avatar
TroXsA
Une tite erreur je pense :)

"TroXsA" a écrit dans le message de news:
ddd6ah$2p7$
Non c'est pas comme ça ;)

Dim myThread As System.Threading.Thread
myThread = New System.Threading.Thread(AddressOf WatchThread)
myThread.Start()



************************************************************
Sub WatchThread
Dim a As Int16
a = 0
While (a = 0)
Watch("d:", "*.*")
End While
End Sub
************************************************************
Avatar
alors j'ai bien avancé !


dans la boucle il faut faire cela !!
fw.WaitForChanged(WatcherChangeTypes.All)du coup je n'utilise plus de tread
et comme il ne boucle plus indefiniment il ne me prends plus de cpu

ps: avec le tread et la boucle il prends quand meme 100% de cpu

mais des que je l'aurais terminé
je mettrais le code complet !

@+ et merci encore



"TroXsA" a écrit dans le message de news:
ddd6oq$2t7$
Une tite erreur je pense :)

"TroXsA" a écrit dans le message de news:
ddd6ah$2p7$
Non c'est pas comme ça ;)

Dim myThread As System.Threading.Thread
myThread = New System.Threading.Thread(AddressOf WatchThread)
myThread.Start()



************************************************************
Sub WatchThread
Dim a As Int16
a = 0
While (a = 0)
Watch("d:", "*.*")
End While
End Sub
************************************************************



Avatar
TroXsA
Simpa :) merci !


@++

a écrit dans le message de news:

alors j'ai bien avancé !


dans la boucle il faut faire cela !!
fw.WaitForChanged(WatcherChangeTypes.All)du coup je n'utilise plus de
tread et comme il ne boucle plus indefiniment il ne me prends plus de cpu

ps: avec le tread et la boucle il prends quand meme 100% de cpu

mais des que je l'aurais terminé
je mettrais le code complet !

@+ et merci encore



"TroXsA" a écrit dans le message de news:
ddd6oq$2t7$
Une tite erreur je pense :)

"TroXsA" a écrit dans le message de news:
ddd6ah$2p7$
Non c'est pas comme ça ;)

Dim myThread As System.Threading.Thread
myThread = New System.Threading.Thread(AddressOf WatchThread)
myThread.Start()



************************************************************
Sub WatchThread
Dim a As Int16
a = 0
While (a = 0)
Watch("d:", "*.*")
End While
End Sub
************************************************************