IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Dotnet Discussion :

Supprimer un fichier Bitmap ?


Sujet :

Dotnet

  1. #1
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Supprimer un fichier Bitmap ?
    Bonjour

    j'ai un prog qui me crée un bitmap et j'aimerai le supprimer mais malheureusement je ne peu pas même si je libère les espace avec dispose().

    je souhaite juste killer la variable MyTempImage que je charge auparavant .

    Avez vous une idée ?

    Merci

    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
    Dim MyTempImage As Bitmap = New Bitmap(G_classSlogan.TempExtractFolder & G_classSlogan.RecId & ".bmp")
     
            If MyTempImage.Height > G_bin_params.PictureHeight Then
              PO_Result.Return_Message = "ERREUR, la taille de l'image est incorrect"
              Return -2
              Exit Function
            End If
     
            If MyTempImage.Width > G_bin_params.PictureWidth Then
              PO_Result.Return_Message = "ERREUR, la taille de l'image est incorrect"
              Return -2
              Exit Function
            End If
     
     
               MyTempImage.Dispose()

  2. #2
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Bon
    bonjour
    Aucune solution, je ne sais pas pkoi il ne supprime pas le fichier, j'ai fait aussi un dispose() mais rien à faire.
    merci

  3. #3
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    Le problème sera plus à chercher du coté du code qui crée le fichier, cela dit, après relecture de ton post, un .Dispose() n'a jamais supprimé un fichier...
    Donne nous le code de création du fichier et celui de suppression, on pourra alors t'aider, le code que tu nous donnes ne fais que de vérifier la taille de ton image...

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  4. #4
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci Jack
    OUi en effet j'ai omis .. désolé
    alors pour la suppression du fichier c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     G_classSlogan.TempExtractFolder = Environment.GetEnvironmentVariable("Temp") + "\"
     
        Try
     
          File.Delete(G_classSlogan.TempExtractFolder + G_classSlogan.RecId + ".bmp")
     
        Catch ex As Exception
          PO_Result.Message_Type = "BMP EXT"
          PO_Result.Return_Message = "Erreur éffacement image : " + ex.Message
          Exit Sub
        End Try
    au fait je délete un fichier qui existes dans un dossier temporaire.
    Merci @ vous

  5. #5
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Ok pour la suppression.

    Qu'elle est l'exception qui t'es retournée ?
    Si l'exception est que le fichier est déjà utilisé alors le problème n'est pas à régler vers la suppression, mais vers la création ou l'utilisation de ce fichier, est-ce que seul ton programme utilise ce fichier ?

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  6. #6
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci
    il supprime pas le fichier justement et retourne l'exception dans le catch.
    Au fait mon programme vas créer une image .bmp fait un ensemble de traitement après. Ce p^programme est dans un service Windows qui s’exécute toutes les 10 mn avec un timmer
    La première exécution se fait ok sans problème mais quand le service se lance une deuxième fois avec le timmer, il passe à l'exception.
    La question est ce que quand un service windows s’exécute, est ce qu'il libére toutes les ressources après l’exécution?
    merci @ vous J@ck

  7. #7
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    il supprime pas le fichier justement et retourne l'exception dans le catch.
    Et donc qu'elle est cette exception ? En debug mets un point d’arrêt dans le catch et provoque le bug.

    La première exécution se fait ok sans problème mais quand le service se lance une deuxième fois avec le timer, il passe à l'exception.
    En effet il y a donc de forte chance que le programme ne libère pas toutes les ressources qu'il a utilisé lors du premier traitement, l'exception nous le confirmera...

    La question est ce que quand un service windows s’exécute, est ce qu'il libére toutes les ressources après l’exécution?
    Tout dépend du developpeur

    Chaque fois que tu utilises un fichier (ou une autre ressource) dans un de tes programmes il faut absolument libérer les ressources utilisées, je te conseil d'ailleurs d'utiliser l'instruction using pour tous les flux de fichier. Hésite pas a nous donner les bouts de code qui ouvre et traite ton fichier.

    J@ck
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  8. #8
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Ok
    Merci J@ck pour l'ensemble de ces explications

    comment utiliser un using dans le cas d’un delete ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    using fichierDelete as = new ...?
    file.delete()
    end using
    je sais comment utiliser le using pour une écriture avec streamwriter .. mais pas un delete

    Merci

  9. #9
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Dans le cas d'un Delete pas besoin de flux puisque pas besoin des données, on supprime c'est tout.

    Je persiste que le problème n'est pas à chercher vers la suppression du fichier mais vers sa création ou son utilisation, le bug se produit sur la suppression mais ce n'est pas un problème de code à ce niveau. D'ailleurs je pense que même si tu essaye de supprimer le fichier depuis l'explorateur Windows alors que ton service tourne tu n'y arrivera pas ...

    Sans le code de création et d'utilisation on ne pourra rien pour toi.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  10. #10
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut tout a fait ok .
    Oui Ja@ck , même au niveau de l'explo je n'arrive pas a le supprimer, le fichier est utilisé dans un autre processus.
    pour la création du fichier ci-joint le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Try
                  result3 = CreateSlogan.CreateSlogan(G_Delta_signing_prod_params _
         , MacType, G_bin_params.IsPPI, SloType _
         , G_classSlogan.TempExtractFolder & G_classSlogan.RecId & ".bmp", G_classSlogan.TempExtractFolder & G_classSlogan.RecId & "_ELD.bmp", G_bin_params.Bin_output_directory, G_classSlogan.Title.Trim(" ") _
         , G_classOF.OF_data.Partnumber & "A", G_classSlogan.RecId, G_bin_params.IsOsiris, CType(G_bin_params.OMEGA_PicturResolutionX, UInteger), CType(G_bin_params.OMEGA_PicturResolutionY, UInteger), CType(G_bin_params.ELD_PictureResolution, UInteger), CType(G_bin_params.ELD_PictureResolution, UInteger), True, True, PPIType, "")
                Catch ex As Exception
                  PO_Result.Return_Message = ex.Message + "Erreur lors de la création du Slogan OMEGA"
                  Return -2
                Finally
                  CreateSlogan = Nothing
                  SloType = Nothing
                  MacType = Nothing
                End Try

  11. #11
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Ton bout de code ne nous fais pas avancer. Il nous faut ce qu'il y a de caché derrière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CreateSlogan.CreateSlogan(...)
    Ce que j'attends c'est la ligne de code de création du fichier. En debug, tu peut suivre le chemin d’exécution du programme en pas à pas, et rentrer dans les méthodes en fessant un pas à pas entrant.
    Tu devrais arriver sur un File.Create(...) ou quelque chose comme ça.

    Ce n'est pas toi qui a écris les lignes de création et de gestion des ces fichiers ?

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  12. #12
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Non
    Non c'est une DLL qui a été fournit par des presta, donc pas à moi . je vis faire le F10 et je te dirai en tout cas moi j’interviens pas sur la création des images.
    merci

  13. #13
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    ... fournit par des presta ...
    ah le problème est donc sans doute ici !
    Il faudrait te faire un petit prog de test pour être sur mais il y a de grandes chances que ce soient eux qui aient codés cette dll avec les pieds. Le meilleur moyen est de faire un prog de test qui te crée jsute un fichier, rien d'autre aucune traitement, que des appels à leurs dll, et ensuite tu essayes de le supprimer avec l'explorateur ... D'ailleurs cela pourra valider que ce n'est pas non plus toi qui réalises des traitements sur le fichiers sans les libérer.

    Une solution (temporaire !) pourrait être d’arrêter le service et de le relancer, cela aura comme effet de libérer tous les flux ouvert. Après si c'est un service windows destiné à tourner en permanence je m'assurerais que tous les fichiers sont bien libérés à chaque accès sinon le service risque de rapidement consommer toutes les ressources de la machine ...

    J@cK.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  14. #14
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Si on reprend le code de ton premier post, dans le cas où ton image est plus grande qu'une certaine valeur, tu retournes un message d'erreur (ce qui sort de la fonction). Dans ce cas, tu ne disposes pas ton Bitmap : MyTempImage.Dispose() n'est pas exécuté et empêchera la suppression du fichier. Le problème ne viendrait-il pas de là ?

  15. #15
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci
    @ Jack
    En fait le service tourne déjà et ne pose pas de problème donc leur DLL est fonctionnelle et retourne bien les valeurs souhaitées, Le GROS PROBLÈME est quand c'est un service Windows qui tourne en tache de fond, est ce que ce service ne consonne pas toutes les ressources du moment qu'il tourne.

    @ Sebastian, pour le dispose, j'ai déjà fais le test, rien à faire, il est con et veut rien savoir ..

    Merci

  16. #16
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Tu dis
    En fait le service tourne déjà et ne pose pas de problème donc leur DLL est fonctionnelle et retourne bien les valeurs souhaitées
    et après
    Le GROS PROBLÈME est quand c'est un service Windows qui tourne en tache de fond
    Déjà pour moi un service ou un service Windows c'est pareil, me dire si pour toi il y a une différence.
    Ce que je comprends c'est que si tu fais un appel à ta dll ET que tu arrêtes le programme, alors ensuite tu peux supprimer le fichier. Par contre si tu fais fonctionner le programme en mode service (donc on ne l’arrête jamais) la tu ne peux pas supprimer le fichier.

    Donc test ça :

    1. Tu fais un appel à la fonction de génération du fichier puis arrête le programme, tu peux supprimer le fichier depuis l'explorateur.
    2. Tu fais UNIQUEMENT un appel à la fonction de génération du fichier puis tente de supprimer le fichier (avant l’arrêt du programme), tu ne peux pas.

    Si le point 2 est vrai alors c'est bien dans la dll que le problème se trouve. Très sincèrement ça devrait te prendre moins de 15 minutes pour te faire un programme de test ou juste tu appel la fonction de création du fichier (mets tous les paramètres en dur), tu mets un point d’arrêt juste après, ou un ReadLine() en console, ou une MessageBox en winform... enfin un truc pour arrêter l’exécution sans arrêter le programme, et tu tente de supprimer ton fichier.

    En tout cas je n'ai certes du coder qu'un ou 2 services Windows mais il n'y a pas d'histoire de consommation de ressources différentes si on est dans un service ou non.

    J@ck.

    [Edit] par contre je rejoins @ebastien, il est également parfaitement possible que le problème vienne de toi et qu'a un moment tu ne libère pas le fichier... Mais la première étape pour moi et de valider la dll (d'expérience le code qui vient de l’extérieur est à valider, sans quoi les erreurs des autres on vite fait de nous retomber dessus, et les autres in-fine c'est souvent des stagiaires )
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  17. #17
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Merci
    Bonjour Messieurs, merci pour vos réflexions, je vais essayer d'expliquer le projet et les finalités.

    A la date d’aujourd’hui, il existe un programme que je n'ai pas développé et qui tourne en continue, le programme génère des fichier image a partir d'un commande, l'image généré est stocké dans une base sql server. Comme je l'ai dit ce programme tourne et est fonctionnelle et fais appelle à une DLL.

    Pour des besoins d’évolution, le Boss à décidé d'intégrer ce programme dans un service Windows qui tournera en tache de fond et qui se déclencheras toutes les 20 mn, l'objectif est d’automatiser la tache.

    Donc me concernant, j'ai développé le service windows (Onstart et onstop), et ce service me génère un ensemble de fichiers qui sont correcte.

    La question que je me pose : est ce que un service windows qui tourne libère toutes les ressources ? par ce que le programme sans le service windows fonctionne correctement

    Voila voilou, j’espère que je suis plus claire .
    merci @ vous

  18. #18
    Membre expérimenté
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Points : 1 511
    Points
    1 511
    Par défaut
    Bonjour,

    est ce que un service windows qui tourne libère toutes les ressources ?
    Comme tout autre programme il fait ce qu'on lui dit de faire (je sais c'est facile) ! Si le développeur alloue des ressources mais ne les libères jamais alors le service consommera de plus en plus de ressources, si le développeur les a libérées pas de soucis.
    Ce que je veux dire c'est qu'un service Windows n'est pas différent d'un autre programme, c'est juste qu'il démarre autrement et qu'il y a une gestion des droits vue que c'est le système qui le lance et non un utilisateur, mais il n'y a pas à ma connaissance de gestion spécial des ressources que ce soit mémoires ou accès disque.

    J@ck.
    Pas de réponse par MP, merci.

    Penser au ça fait plaisir

  19. #19
    Membre du Club
    Homme Profil pro
    PartNumber
    Inscrit en
    Octobre 2012
    Messages
    309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : PartNumber
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2012
    Messages : 309
    Points : 65
    Points
    65
    Par défaut Ok
    Ok J@ck. c'est plus explicite, je vais essayer de piocher plus . merci @ vous

Discussions similaires

  1. [VB.NET] Comment supprimer un fichier qui est utilisé ?
    Par Toon94 dans le forum Windows Forms
    Réponses: 12
    Dernier message: 13/06/2010, 12h59
  2. [cvs] supprimer un fichier
    Par ed_hunter dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 27/03/2007, 18h17
  3. Sauvegarder la fenetre OpenGL sous un fichier bitmap
    Par corey_jx dans le forum OpenGL
    Réponses: 3
    Dernier message: 16/06/2004, 15h48
  4. Supprimer un fichier par rapport a une date
    Par NewB dans le forum Linux
    Réponses: 2
    Dernier message: 25/06/2003, 13h44
  5. transfert d'un fichier bitmap en socket tcp
    Par localhost dans le forum C++Builder
    Réponses: 5
    Dernier message: 29/07/2002, 00h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo