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
FileIO me permet de récupérer les évènement dans un fichier
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
C'est la partie RenameFile qui ne fonctionne pas à chaque fois
J'obtiens l'erreur suivante
et si je ne mets pas le catch"Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus."
Comment vérifier si le processus et libre avant de renommer les fichiers qui suivent ?"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*)
"
J'espère avoir était assez clair, et vous remercie d'avance pour votre aide.
Partager