Utilisation FileSystemWatcher et utilisation de l'évènement Created
Bonjour,
Je débute en VB.net, donc je m'inspire pas mal des cours trouvés sur ce site.
EN particulier de la fonction FileSystemWatcher développé dans le cours le composant FileSystemWatcher de Ronald VASSEURS.
J'essaie de développer un service Windows qui doit surveiller l’arrivée de fichiers dans un répertoire et de les renommer.
Pour le développement du Service je pense que c'est OK.
Par contre pour la surveillance du répertoire et le renommage des fichiers ça ne fonctionne qu'une fois puis j'ai une exception. Ou bien il faut que j'attente longtemps entre la copie d'un autre fichier.
Pour tester ces copies j'ai mis la fonction dans une form pour ne pas être obliger de relancer mon service à chaque test.
J'ai essayé de mettre un Try...Catch pour récupérer l'erreur, mais je ne suis pas sur que ce sois la meilleur méthode de débogage.
Ci-joint la méthode created
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
' Evénements : création
Private Shared Sub MyFsWatcher_Created(ByVal sender As Object, ByVal e As FileSystemEventArgs) Handles MyFsWatcher.Created
Dim strNomFichier, StrExtension As String
strNomFichier = Left(e.Name, Len(e.Name) - 4)
StrExtension = Right(e.Name, 4)
FileIO.WriteToFile(Date.Now & " - " & e.FullPath & " Créé !" + vbNewLine)
Try
My.Computer.FileSystem.RenameFile(e.FullPath, strNomFichier & "_CBO" & StrExtension)
FileIO.WriteToFile(Date.Now & " - Fichier " & e.FullPath & " Renommé en " & strNomFichier & "_CBO" & StrExtension + vbNewLine)
Catch ex As Exception
FileIO.WriteToFile(Date.Now & " - " & ex.Message + vbNewLine)
End Try
End Sub |
FileIO me permet de récupérer les évènement dans un fichier
C'est la partie RenameFile qui ne fonctionne pas à chaque fois
J'obtiens l'erreur suivante
Citation:
"Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus."
et si je ne mets pas le catch
Citation:
"Cette exception a été levée à l'origine dans cette pile des appels*:
System.IO.__Error.WinIOError(int, string)
System.IO.__Error.WinIOError()
System.IO.File.InternalMove(string, string, bool)
Microsoft.VisualBasic.FileIO.FileSystem.RenameFile(string, string)
Microsoft.VisualBasic.MyServices.FileSystemProxy.RenameFile(string, string)
RenommerEP.SRenommerEP.MyFsWatcher_Created(Object, System.IO.FileSystemEventArgs) dans SRenommerEP.vb
System.IO.FileSystemWatcher.OnCreated(System.IO.FileSystemEventArgs)
System.IO.FileSystemWatcher.NotifyFileSystemEventArgs(int, string)
System.IO.FileSystemWatcher.CompletionStatusChanged(uint, uint, System.Threading.NativeOverlapped*)
System.Threading._IOCompletionCallback.PerformIOCompletionCallback(uint, uint, System.Threading.NativeOverlapped*)
"
Comment vérifier si le processus et libre avant de renommer les fichiers qui suivent ?
J'espère avoir était assez clair, et vous remercie d'avance pour votre aide.