none
Suppression de fichier RRS feed

  • Question

  • Bonjour, j'ai un programme qui traite des fichiers pour les imprimer, et après avoir imprimer un fichier, ce fichier se voit supprimé, or c'est là que j'ai un petit souci, ma procédure pour effacer le fichier ne fonctionne pas. Voici mon code pour effacer un fichier :

        Private Sub supprimer_fichier()
    
            Dim k As Integer = 0
            For g = 0 To 1
                g = 0
    
                Try
                    FileCopy(cheminRecu & ListBox1.Items(g), cheminClasse & ListBox1.Items(g)) ' source->destination
                    'MsgBox(cheminRecu & ListBox1.Items(g))
                    Kill(cheminRecu & ListBox1.Items(g)) ' supprime fichier qui a été copié dans faxClasse
                    ListBox1.Items.RemoveAt(g)
                    Thread.Sleep(2000)
                Catch
                    'ne rien faire
                End Try
                k = k + 1
                If k = 2 Then
                    g = 1
                End If
            Next g
        End Sub
    


    Arrivé à la ligne kill, j'ai une exception qui me dit que le fichier a supprimer est déjà utilisé par un autre processus, j'avais déjà rencontrer ce problème après que le fichier est était envoyé par mail et non imprimé. Ce coup là j'avais utilisé la méthode dispose et cela avait fonctionné, or ici ça ne fonctionne pas, j'ai essayé sur plusieurs objet mais ça en fonctionne toujours pas, voici le code de ma fonction imprimer :

        Public Sub Printing(ByVal printer As String, ByVal img As String)
            oImage = Image.FromFile(img)
            Try
                'Dim pd As New PrintDocument()
                AddHandler pd.PrintPage, AddressOf pd_PrintPage
                'pd.PrinterSettings.PrinterName = imprimante_ADV
                pd.PrinterSettings.PrinterName = imprimante_informatique
    
    
                If pd.PrinterSettings.IsValid Then
                    'pd.Print()
                Else
                    MessageBox.Show("Printer is invalid.")
                End If
            Catch ex As Exception
                MessageBox.Show(ex.Message)
            End Try
            'supprimer_fichier()
            pd.Dispose()
            PictureBox1.Dispose()
            'If Not Me.PictureBox1.Image Is Nothing Then Me.PictureBox1.Image.Dispose()
            System.Threading.Thread.Sleep(10000)
        End Sub
    


    Donc voila, si vous avez une idée pour ce problème je suis preneur :)

    Cordialement, maxkun

    mardi 22 novembre 2011 08:01

Réponses

  • C'est bon j'ai trouvé, je faisais la méthode dispose() sur le mauvais objet, il fallait la faire sur l'objet oImage.

    Ce qui donne donc :

    oImage.Dispose()
    


    • Marqué comme réponse maxkun mardi 22 novembre 2011 09:15
    mardi 22 novembre 2011 09:15

Toutes les réponses

  • C'est bon j'ai trouvé, je faisais la méthode dispose() sur le mauvais objet, il fallait la faire sur l'objet oImage.

    Ce qui donne donc :

    oImage.Dispose()
    


    • Marqué comme réponse maxkun mardi 22 novembre 2011 09:15
    mardi 22 novembre 2011 09:15
  • Bonjour,

    Le fichier que l'on supprime est celui qui correspond à img ? Cela ressemble à une remarque que j'avais faite lors d'une discussion précédente. J'ai l'impression que cela pourrait être qq chose comme :
    - Print *lance* l'impression et le code continue ensuite en séquence
    - on essaie ensuite de supprimer le fichier qui correspond à l'image qui est toujours en cours d'utilisation au fur et à mesure des évènements PrintPage

    Il faudrait je pense supprimer l'image dans l'évènement EndPrint ce qui permet d'être sûr que l'impression est finie (et non pas seulement lancée). Eventuellement il est possible de vérifier dans un premier temps en mettant des Debug.WriteLine pour voir dans quel ordre ont lieu les opérations (je pense qu'ici on verrait que la ligne "supprimer_fichier" apparait avant EndPrint voire avant PrintPage.


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    mardi 22 novembre 2011 09:22
    Modérateur
  • Oui, j'avais déjà posé une question du même genre, avec l'envoie d'un mail, tu m'avait dit d'utiliser la méthode dispose() sur l'objet message. Ici je n'appliquai pas la fonction dispose() sur le bon objet, c'est pour cela que ça ne fonctionnait pas :s
    mardi 22 novembre 2011 12:34