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 : 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
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
"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
"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.