OVH Cloud OVH Cloud

FileSystemWatcher

10 réponses
Avatar
Romuald.
Salut à tous,

J'aurais besoin d'un petit conseil ou d'une méthode. Je développe en VB.net
2003.

Je dois sauvegarder des fichiers ou répertoires en temps réel (une fois
qu'ils refermés par exemple). Pour cela j'utilise le composant
"FileSystemWatcher".

Mon problème est de pouvoir déclarer plusieurs instances de
FileSystemWatcher à partir d'une liste de fichiers ou répertoires.

Exemple:

For i to Nbre de Fichiers ou répertoires
Dim Variable & i as New FileSystemWatcher
next i

Le nombre de fichiers ou répertoires est variable, c'est pour cela que je
veux faire un For i.

Si quelqu'un aurait une petit idée.

10 réponses

Avatar
Zazar
Bonjour,

Mon problème est de pouvoir déclarer plusieurs instances de
FileSystemWatcher à partir d'une liste de fichiers ou répertoires.

Exemple:

For i to Nbre de Fichiers ou répertoires
Dim Variable & i as New FileSystemWatcher
next i

Le nombre de fichiers ou répertoires est variable, c'est pour cela que je
veux faire un For i.



Vous pouvez utiliser un tableau, un arraylist voire une Hashtable (la clef
serait alors le nom du fichier/du dossier associé au FileSystemWatcher).
Mais peut-être n'ai je pas compris la question ?

--
Zazar
Avatar
Romuald.
Merci de ta réponse.

Je vais essayer avec Array. Ma je ne suis pas certain que ça va marcher.
Voici un exemple:

Dans un fichier "Liste.txt", j'ai une liste de répertoires à surveiller
"C:ProgramFilesMyApp", "C:Toto", etc....

A partir de VB.Net, je dois lire la liste des répertoires de mon fichier
Liste.txt. Ensuite pour chacun des répertoires de que je dois surveiller, je
dois déclarer avec le contrôle "FileSystemWatcher" chacun de ces répertoires.

Dim Variable1 as new FileSystemWatcher
Dim Variable2 as new FileSystemWatcher
Dim Variable3 as new FileSystemWatcher

Ma je ne veux pas déclacer en "dur" mes noms de variables, étant donné que
la liste des répertoires de mon fichier "Liste.txt" peut s'allonger.... je
veux ainsi pouvoir rajouter un répertoire dans mon fichier "Liste.txt" dans
rajouter une nouvelle variable pour ce répertoire.

Dim Variable4 as new FileSystemWatcher.

J'espère que mes explications sont assez claires. Je vais me plonger avec
"Array", mais si tu as une autre solution, je suis preneur.

Merci de ton aide.




"Zazar" a écrit :

Bonjour,

> Mon problème est de pouvoir déclarer plusieurs instances de
> FileSystemWatcher à partir d'une liste de fichiers ou répertoires.
>
> Exemple:
>
> For i to Nbre de Fichiers ou répertoires
> Dim Variable & i as New FileSystemWatcher
> next i
>
> Le nombre de fichiers ou répertoires est variable, c'est pour cela que je
> veux faire un For i.

Vous pouvez utiliser un tableau, un arraylist voire une Hashtable (la clef
serait alors le nom du fichier/du dossier associé au FileSystemWatcher).
Mais peut-être n'ai je pas compris la question ?

--
Zazar





Avatar
Zazar
Bonjour,

Je vais essayer avec Array. Ma je ne suis pas certain que ça va marcher.


Moi si. :) Mais si vous avez un problème : postez votre code.

Voici un exemple:

Dans un fichier "Liste.txt", j'ai une liste de répertoires à surveiller
"C:ProgramFilesMyApp", "C:Toto", etc....

A partir de VB.Net, je dois lire la liste des répertoires de mon fichier
Liste.txt. Ensuite pour chacun des répertoires de que je dois surveiller,


je
dois déclarer avec le contrôle "FileSystemWatcher" chacun de ces


répertoires.

Dim Variable1 as new FileSystemWatcher
Dim Variable2 as new FileSystemWatcher
Dim Variable3 as new FileSystemWatcher

Ma je ne veux pas déclacer en "dur" mes noms de variables, étant donné que
la liste des répertoires de mon fichier "Liste.txt" peut s'allonger.... je
veux ainsi pouvoir rajouter un répertoire dans mon fichier "Liste.txt"


dans
rajouter une nouvelle variable pour ce répertoire.

Dim Variable4 as new FileSystemWatcher.



C'est bien à ça que servent les collections.
Ce que je trouve bizarre c'est que vous ne connaissez visiblement pas les
tableaux mais vous utilisez les FileSystemWatcher, alors que les tabeaux
c'est la base de la programmation et que les FileSystemWatcher sont
généralement inconnus des débutants.

Bon courage,

--
Zazar
Avatar
Romuald.
Salut,

Merci pour cette info.
Oui c'est vrai que je ne travaille jamais avec les tableaux, pourtant ils
ont l'air très utiles. Il faut que je travaille dessus....

Merci.

"Zazar" a écrit :

Bonjour,

> Je vais essayer avec Array. Ma je ne suis pas certain que ça va marcher.
Moi si. :) Mais si vous avez un problème : postez votre code.

> Voici un exemple:
>
> Dans un fichier "Liste.txt", j'ai une liste de répertoires à surveiller
> "C:ProgramFilesMyApp", "C:Toto", etc....
>
> A partir de VB.Net, je dois lire la liste des répertoires de mon fichier
> Liste.txt. Ensuite pour chacun des répertoires de que je dois surveiller,
je
> dois déclarer avec le contrôle "FileSystemWatcher" chacun de ces
répertoires.
>
> Dim Variable1 as new FileSystemWatcher
> Dim Variable2 as new FileSystemWatcher
> Dim Variable3 as new FileSystemWatcher
>
> Ma je ne veux pas déclacer en "dur" mes noms de variables, étant donné que
> la liste des répertoires de mon fichier "Liste.txt" peut s'allonger.... je
> veux ainsi pouvoir rajouter un répertoire dans mon fichier "Liste.txt"
dans
> rajouter une nouvelle variable pour ce répertoire.
>
> Dim Variable4 as new FileSystemWatcher.

C'est bien à ça que servent les collections.
Ce que je trouve bizarre c'est que vous ne connaissez visiblement pas les
tableaux mais vous utilisez les FileSystemWatcher, alors que les tabeaux
c'est la base de la programmation et que les FileSystemWatcher sont
généralement inconnus des débutants.

Bon courage,

--
Zazar






Avatar
Romuald
Salut Zazar,

Je me suis penché sur les collections, mais j'aurais encore besoin de ton
aide si tu veux bien.

Voici le code que j'ai écrit:

Dim ListeFichier() As New FileSystemWatcher
Dim t as Integer
Dim Obj As Object

For Each Obj In Liste
ListeFichier(t).Path = Obj
ListeFichier(t).NotifyFilter = NotifyFilters.Size Or NotifyFilters.LastWrite
ListeFichier(t).IncludeSubdirectories = True
ListeFichier(t).EnableRaisingEvents = True
t = t + 1
Next

Le problème est qu'on ne peut pas déclarer de New avec les tableaux.

Comment je peux déclarer une nouvelle variable "FileSystemWatcher" à chaque
boucle ?

Merci.

Romuald.

"Zazar" a écrit :

Bonjour,

> Je vais essayer avec Array. Ma je ne suis pas certain que ça va marcher.
Moi si. :) Mais si vous avez un problème : postez votre code.

> Voici un exemple:
>
> Dans un fichier "Liste.txt", j'ai une liste de répertoires à surveiller
> "C:ProgramFilesMyApp", "C:Toto", etc....
>
> A partir de VB.Net, je dois lire la liste des répertoires de mon fichier
> Liste.txt. Ensuite pour chacun des répertoires de que je dois surveiller,
je
> dois déclarer avec le contrôle "FileSystemWatcher" chacun de ces
répertoires.
>
> Dim Variable1 as new FileSystemWatcher
> Dim Variable2 as new FileSystemWatcher
> Dim Variable3 as new FileSystemWatcher
>
> Ma je ne veux pas déclacer en "dur" mes noms de variables, étant donné que
> la liste des répertoires de mon fichier "Liste.txt" peut s'allonger.... je
> veux ainsi pouvoir rajouter un répertoire dans mon fichier "Liste.txt"
dans
> rajouter une nouvelle variable pour ce répertoire.
>
> Dim Variable4 as new FileSystemWatcher.

C'est bien à ça que servent les collections.
Ce que je trouve bizarre c'est que vous ne connaissez visiblement pas les
tableaux mais vous utilisez les FileSystemWatcher, alors que les tabeaux
c'est la base de la programmation et que les FileSystemWatcher sont
généralement inconnus des débutants.

Bon courage,

--
Zazar






Avatar
Zazar
Bonjour,
Dim ListeFichier() As New FileSystemWatcher


ListeFichier est un tableau, il faut donc lui affecter un tableau :
Dim ListeFichier() As New FileSystemWatcher(nombredobjetsdutableaux)

Dim t as Integer
Dim Obj As Object

For Each Obj In Liste


Un tableau peut être vu comme plusieurs variables, il faut donc affecter un
FileSystemWatcher à chaque élément du tableau :
ListeFichier(t) = New FileSystemWatcher()


ListeFichier(t).Path = Obj
ListeFichier(t).NotifyFilter = NotifyFilters.Size Or
NotifyFilters.LastWrite
ListeFichier(t).IncludeSubdirectories = True
ListeFichier(t).EnableRaisingEvents = True
t = t + 1
Next



--
Zazar
Avatar
Romuald
Re-salut Zazar,

Merci de cette réponse rapide.
Je viens d'essayer ton code, mais ca ne marche pas. Voici mon code au
complet qui ne fonctionne pas non plus:

Dim LireChemin As OleDbDataReader
Dim ds1 As OleDbCommand = New OleDbCommand
Dim ListeFichier() As FileSystemWatcher
Dim Liste As New ArrayList
Dim i, t As Integer

Try
With ds1
.Connection = dbSauvegarde
.CommandType = CommandType.Text
.CommandText = "Select * from Liste"
LireChemin = .ExecuteReader
End With
Liste.Clear()
Do While LireChemin.Read = True
If LireChemin.IsDBNull(LireChemin.GetOrdinal("Chemin")) =
False Then
Liste.Add(LireChemin("Chemin"))
End If
Loop
LireChemin.Close()

'Nbre
Dim Obj As Object
For Each Obj In Liste
ListeFichier(t) = New FileSystemWatcher
ListeFichier(t).Path = Obj
ListeFichier(t).NotifyFilter = NotifyFilters.Size Or
NotifyFilters.LastWrite
ListeFichier(t).IncludeSubdirectories = True
listeFichier(t).EnableRaisingEvents = True
t = t + 1
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try

Merci pour ton aide.

"Zazar" a écrit :

Bonjour,
> Dim ListeFichier() As New FileSystemWatcher
ListeFichier est un tableau, il faut donc lui affecter un tableau :
Dim ListeFichier() As New FileSystemWatcher(nombredobjetsdutableaux)

> Dim t as Integer
> Dim Obj As Object
>
> For Each Obj In Liste
Un tableau peut être vu comme plusieurs variables, il faut donc affecter un
FileSystemWatcher à chaque élément du tableau :
ListeFichier(t) = New FileSystemWatcher()


> ListeFichier(t).Path = Obj
> ListeFichier(t).NotifyFilter = NotifyFilters.Size Or
> NotifyFilters.LastWrite
> ListeFichier(t).IncludeSubdirectories = True
> ListeFichier(t).EnableRaisingEvents = True
> t = t + 1
> Next

--
Zazar





Avatar
Zazar
> Dim LireChemin As OleDbDataReader
Dim ds1 As OleDbCommand = New OleDbCommand
Dim ListeFichier() As FileSystemWatcher
Dim Liste As New ArrayList
Dim i, t As Integer

Try
With ds1
.Connection = dbSauvegarde
.CommandType = CommandType.Text
.CommandText = "Select * from Liste"
LireChemin = .ExecuteReader
End With
Liste.Clear()
Do While LireChemin.Read = True
If LireChemin.IsDBNull(LireChemin.GetOrdinal("Chemin")) > False Then
Liste.Add(LireChemin("Chemin"))
End If
Loop
LireChemin.Close()



Ici, il manque :

ListeFichier = new FileSystemWatcher(Liste.Count)

'Nbre
Dim Obj As Object
For Each Obj In Liste
ListeFichier(t) = New FileSystemWatcher
ListeFichier(t).Path = Obj
ListeFichier(t).NotifyFilter = NotifyFilters.Size Or
NotifyFilters.LastWrite
ListeFichier(t).IncludeSubdirectories = True
listeFichier(t).EnableRaisingEvents = True
t = t + 1
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try




--

Zazar
Avatar
Romuald
Zazar,

La ligne de code ne fonctionne pas :

ListeFichier = new FileSystemWatcher(Liste.Count)

C'est normal puisque "New FileSystemWatcher" attend dans les parenthèses un
chemin "Path".

Mon problème à l'air simple à la base, mais si simple que ca !!!!
"Zazar" a écrit :


> Dim LireChemin As OleDbDataReader
> Dim ds1 As OleDbCommand = New OleDbCommand
> Dim ListeFichier() As FileSystemWatcher
> Dim Liste As New ArrayList
> Dim i, t As Integer
>
> Try
> With ds1
> .Connection = dbSauvegarde
> .CommandType = CommandType.Text
> .CommandText = "Select * from Liste"
> LireChemin = .ExecuteReader
> End With
> Liste.Clear()
> Do While LireChemin.Read = True
> If LireChemin.IsDBNull(LireChemin.GetOrdinal("Chemin")) > > False Then
> Liste.Add(LireChemin("Chemin"))
> End If
> Loop
> LireChemin.Close()

Ici, il manque :

ListeFichier = new FileSystemWatcher(Liste.Count)

> 'Nbre
> Dim Obj As Object
> For Each Obj In Liste
> ListeFichier(t) = New FileSystemWatcher
> ListeFichier(t).Path = Obj
> ListeFichier(t).NotifyFilter = NotifyFilters.Size Or
> NotifyFilters.LastWrite
> ListeFichier(t).IncludeSubdirectories = True
> listeFichier(t).EnableRaisingEvents = True
> t = t + 1
> Next
> Catch ex As Exception
> MessageBox.Show(ex.Message)
> End Try


--

Zazar





Avatar
Zazar
> La ligne de code ne fonctionne pas :

ListeFichier = new FileSystemWatcher(Liste.Count)



Désolé, c'est l'habitude du C#. La syntaxe correcte est :
redim ListeFichier(Liste.Count)

--
Zazar