none
Libérer mon fichier du webbrowser RRS feed

  • Question

  • Bonjour,

    J'utilise un webbrowser pour afficher des fichiers (notamment des vidéos).
    Lorsque j'ai fini de visionner ces vidéos, je veux les déplacer (ou copy/delete ce qui revient au même).
    Problème : j'ai une erreur (classique) :
    Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus.
    Bien sur je ne peux pas faire WebBrowser.dispose() car sinon je n'ai plus de webbrowser pour la suite....
    des idées?

    Merci.
    jeudi 2 juillet 2009 22:55

Réponses

  • Ok !! J'ai pu reproduire le problème.


    Voila ce que j'ai fait pour solutionner ce souci !!
       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.WebBrowser1.Navigate("c:\movie.html")
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Me.WebBrowser1.Navigate("about:blank")
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            If WebBrowser1.Url.OriginalString = "about:blank" Then
                IO.File.Move("c:\test.mov", "d:\test.mov")
            End If
        End Sub

    En fait je demande le déplacement de la vidéo seulement une fois qu'il aura fini de charger "about:blank". ça marche pour moi, tiens moi au courant si cela solutionne le problème chez toi.
    • Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
    vendredi 3 juillet 2009 15:00
  • Wouééééééééééé!!
    Ca marche!!!!
    Merci mille fois!
    J'ai adapté ton idée à mon cas mais ta solution marche!
    Je met ma solution au cas ou cela serve à quelqu'un:

    Dim IsAboutBlank as boolean =True
    
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.WebBrowser1.Navigate("c:\movie.html")
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            WaitBlank()
    IO.File.Move("c:\test.mov", "d:\test.mov")
        End Sub
    
    
    Sub WaitBlank()
            VideoWebBrowser.Navigate("about:blank")
            Do
                Application.DoEvents()
                System.Threading.Thread.Sleep(100)
                If IsAboutBlank Then Exit Do
            Loop
            IsAboutBlank = False
        End Sub
    
    Private Sub VideoWebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e _
                As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles VideoWebBrowser.DocumentCompleted
            If VideoWebBrowser.Url.OriginalString = "about:blank" Then
                IsAboutBlank = True
            End If
        End Sub
    Voila, plus compliqué mais plus compatible avec mon programme....

    Merci encore!
    • Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
    vendredi 3 juillet 2009 15:33

Toutes les réponses

  • Bonjour,


    Essai de placer ce code avant de déplacer tes vidéos.

    Me.WebBrowser1.DocumentStream = Nothing 
    vendredi 3 juillet 2009 07:11
  • Bien tenté, mais ca ne marche pas.....
    J'ai vraiment passé toute ma soirée la-dessus sans rien trouvé sur internet à propos de ce probleme....
    vendredi 3 juillet 2009 09:19
  • Peux tu nous poster un petit bout de code qui montre comment tu ouvre tes fichiers dans le WebBrowser ??
    vendredi 3 juillet 2009 12:32
  • pour lire un mov, je suis obligé de passer par un fichier Video.html (dedans je met mon code pour que la page soit juste mon mov qui se lance...)
    puis je lis ma vidéo :

    WebBrowser.Navigate("C:\...\Video.html")

    Et lorsque l'utilisateur le décide, il bouge la video dans un autre répertoire en avant chargeant autre chose avant  dans le WebBrowser avec par exemple : WebBrowser.Navigate("C:\....\test.bmp")  : ce qui arrete la lecture de la vidéo, j'ai même essayé de temporiser un peu (sleep) après ca mais quoi que je fasse, lorsque je tente de bouger ma video avec :
    IO.File.Move(adresseDepart, AdresseArrivée)
    me retourne une erreur!!!!

    Meme en chargeant quelque chose d'autre dans le WebBrowser, il n'a pas l'air de lacher mon mov (à cause de l'historique qui lui permet de faire WebBrowser.GoBack je pense...).
    Du coup il me plante avec l'erreur :
    "Le processus ne peut pas accéder au fichier, car il est utilisé par un autre processus."

    J'ai aussi essayer de faire un Copy, puis un Kill() de ma video mais même erreur.

    La seule fois ou j'ai réussi à la bouger (move) c'est en faisant WebBrowser.Dispose() avant, mais ensuite je me retrouve sans WebBrower...

    Je voudrai donc trouver comment faire un Dispose() de seulement l'historique, ou en tout cas ce qui garde un lien avec la video lue...

    Si ce n'est pas clair, n'hésitez pas à poser des questions.

    Merci de votre aide.
    vendredi 3 juillet 2009 13:47
  • Ok !! J'ai pu reproduire le problème.


    Voila ce que j'ai fait pour solutionner ce souci !!
       Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.WebBrowser1.Navigate("c:\movie.html")
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            Me.WebBrowser1.Navigate("about:blank")
        End Sub
    
        Private Sub WebBrowser1_DocumentCompleted(ByVal sender As Object, ByVal e As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles WebBrowser1.DocumentCompleted
            If WebBrowser1.Url.OriginalString = "about:blank" Then
                IO.File.Move("c:\test.mov", "d:\test.mov")
            End If
        End Sub

    En fait je demande le déplacement de la vidéo seulement une fois qu'il aura fini de charger "about:blank". ça marche pour moi, tiens moi au courant si cela solutionne le problème chez toi.
    • Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
    vendredi 3 juillet 2009 15:00
  • Wouééééééééééé!!
    Ca marche!!!!
    Merci mille fois!
    J'ai adapté ton idée à mon cas mais ta solution marche!
    Je met ma solution au cas ou cela serve à quelqu'un:

    Dim IsAboutBlank as boolean =True
    
    
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
            Me.WebBrowser1.Navigate("c:\movie.html")
        End Sub
    
        Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
            WaitBlank()
    IO.File.Move("c:\test.mov", "d:\test.mov")
        End Sub
    
    
    Sub WaitBlank()
            VideoWebBrowser.Navigate("about:blank")
            Do
                Application.DoEvents()
                System.Threading.Thread.Sleep(100)
                If IsAboutBlank Then Exit Do
            Loop
            IsAboutBlank = False
        End Sub
    
    Private Sub VideoWebBrowser_DocumentCompleted(ByVal sender As Object, ByVal e _
                As System.Windows.Forms.WebBrowserDocumentCompletedEventArgs) Handles VideoWebBrowser.DocumentCompleted
            If VideoWebBrowser.Url.OriginalString = "about:blank" Then
                IsAboutBlank = True
            End If
        End Sub
    Voila, plus compliqué mais plus compatible avec mon programme....

    Merci encore!
    • Marqué comme réponse Morphée vendredi 3 juillet 2009 15:33
    vendredi 3 juillet 2009 15:33
  • De rien !! J'avais déja rencontré un souci similaire.
    L'évènement VideoWebBrowser.DocumentCompleted est quand même très pratique !!
    lundi 6 juillet 2009 06:42