Bonjour,

Mon problème est le suivant :

Appeller la fonction IsOpen pour vérifier si un fichier texte est ouvert ou utilisé, puis faire une boucle de test pour attendre que le fichier texte soit fermé avant de quitter la fonction.

Donc :

1/ Appeller la fonction IsOpen pour vérifier si un fichier texte est ouvert ou utilisé =>. Jusque la pas de problème il y a une dizaine de bons exemple sur le site. Comme:
https://www.developpez.net/forums/d1...d-utilisation/
https://stackoverflow.com/questions/...-the-text-file

2/ Il faut que cette fonction attende que le fichier soit fermé par une autre application (un thread sous CMD) => donc il faut réaliser une boucle de test avec tempo pour limiter l'usage inutile du processeur.
Je ne trouve rien comme exemple même chez les anglo-saxons.
Donc j'ai écrit la fonction si dessous qui attend bien mais ne sort pas de la boucle une fois le que le fichier texte est fermé ! Le programme se fige. Pour débloquer ctrl + alt +supp ....!!! Pourquoi ?

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
17
18
19
20
21
22
23
24
25
26
  Public Function IsOpen(ByVal Filepath As String) As Task(Of Boolean)
 
        'Test si un fichier est déjà ouvert
        Dim inputOk As Boolean = False
        Dim sFichier As String = DISK "\abc.txt"
 
        Do Until inputOk = True
 
            'tempo
            Thread.Sleep(50)
            Try
                Dim FS As FileStream = File.Open(sFichier, FileMode.Open, FileAccess.Read, FileShare.None)                 ' Ouverture Ok. Si déjà ouvert : referme
 
                FS.Close()
                FS.Dispose()
                FS = Nothing
 
                'tempo
                Thread.Sleep(50)
            Catch ex As IO.IOException
                If TypeOf ex Is IOException Then inputOk = False Else inputOk = True
            End Try
 
        Loop
 
    End Function
Je ne comprend pas ou est l'erreur dans cette boucle.

S'agit-il d'une impossibilité de mettre un IF après un catch ex ?

Autre idée faut-il faire que la fonction test comme en 1/ puis revenir au programme appelant, tester le retour de ex, si ex true relancer la fonction ?

Si vous avez une idée je vous remercie d'avance pour votre aide.

a+