nicogarou
Messages postés3Date d'inscriptionjeudi 13 septembre 2007StatutMembreDernière intervention29 novembre 2007
-
28 nov. 2007 à 19:16
v_vince_v
Messages postés2Date d'inscriptionjeudi 16 décembre 2004StatutMembreDernière intervention 6 décembre 2007
-
6 déc. 2007 à 17:43
Bonsoir,
J'ai un programme d'envoi de mail qui doit envoyer un fichier en pièce jointe.
J'ai utilisé cette source. Une fois le fichier envoyer, je dois soit l'effacer, soit le renommer , soit le déplacer ... suivant ce qui est passé en paramètre de l'executable.
Le code utilise SmtpClient (.NET 2.0) et la méthode Send.
Mon ami MSDN me dit que send bloque l'exécution du programme pendant l'envoi du mail (sinon il y a SendAsync).
Il me dit aussi que l'accès au fichier pièce jointe est verrouillé pendant l'envoi.
Donc normalement, la fonction d'envoi terminée, je peux faire ce que je veux de mon fichier pièce jointe.
Ce n'est pas le cas.
L'accès au fichier se solde irrémédiablement par "le fichier est actuellement utilisé par un autre utilisateur/processus".
Je peux le copier, mais pas le supprimer ou le déplacer.
Quand le programme se termine, le fichier pièce jointe est deverrouillé, mais j'ai besoin de lui libre avant!
Existe-t-il un moyen de le déverrouiller dans le programme?
Je ne veux pas lancer mon programme dans un .bat qui effacerait le fichier pièce jointe après exécution.
(en effet, il est possible que l'utilisateur ne veuille pas l'effacer à chaque fois)
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 28 nov. 2007 à 20:24
Bah !! moi je ferais une copie du fichier que tu veux envoyer et c'est cette copie que j'enverais. ainsi je peux continuer à faire ce que je veux de mon fichier et cela meme pendant l'envoi
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 28 nov. 2007 à 21:21
Dans la methode Envoi de ta source, il sera peut-etre interessant d'essayer en désinstanciant les objets qui ont servis à l'envoie, une fois l'envoi terminer. C'est à dire les objects message, data, disposition et client.
Voire ensuite de désintancier aussi la classe si elle n'est plus necessaire.
Bien que tout cela devrait etre normalement automatiquement fait à la sortie de la méthode
nicogarou
Messages postés3Date d'inscriptionjeudi 13 septembre 2007StatutMembreDernière intervention29 novembre 2007 28 nov. 2007 à 21:56
Merci pour vos réponses.
Pour ce qui est de la copie de fichier, je veux bien mais dans le cas où l'utilisateur chioisit de supprimer le fichier d'origine, j'ai toujours un fichier créé dont je ne peux me débarasser.
La solution de Casy me plaît plus, mais c'est peut être parce que je ne sais pas ce que veut dire "désinstancier", et encore moins comment le faire. Je me doute que c'est le "contraire" d'un new, cependant je ne sais pas comment le mettre en pratique.
S'il était possible d'avoir un peu plus d'explications à ce sujet, j'en serais fort reconnaissant.
pile_poil
Messages postés682Date d'inscriptionvendredi 6 avril 2007StatutMembreDernière intervention 4 août 20126 28 nov. 2007 à 22:07
en te proposant la copie je pensais justement à ce que tu avais écrit :
" Je ne veux pas lancer mon programme dans un .bat qui effacerait le fichier pièce jointe après exécution.
(en effet, il est possible que l'utilisateur ne veuille pas l'effacer à chaque fois)"
puisque au vu de cette phrase tu savais le détruire apres usage. et comme ce n'était somme toute qu'une copie ..... tu pouvais donc la détruire systématiquement ! maintenant je ne suis pas assez expert pour t'aider plus !
en fait je serais plutot du genre jo la débrouille débutant qu'expert !
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_casy
Messages postés7741Date d'inscriptionmercredi 1 septembre 2004StatutMembreDernière intervention24 septembre 201440 28 nov. 2007 à 22:16
C'est effectivement le contraire de New. Le principe est que ça indique au système (framework) que l'objet n'est plus utilisé et qu'il doit etre détruit.
Dans la pratique, cela consiste tout d'abord la methode Close de l'objet quand elle existe. Ensuite, si elle existe, on appelle la methode Dispose de l'objet. Dans le cas contraire, on declare l'objet comme = Nothing.
nicogarou
Messages postés3Date d'inscriptionjeudi 13 septembre 2007StatutMembreDernière intervention29 novembre 2007 29 nov. 2007 à 08:31
Pour les objets concernés, aucune des methodes close ou dispose n'existe.
J'ai donc tenté avec = nothing.
Mon mail s'envoie toujours mais le programme ne veut toujours pas m'effacer le fichier.
Pour la mise en service (car j'en ai besoin) , je vais utiliser copy avec effacement dans le .bat
Je reste sur le programme pour le plaisir et je vous tiens au courant quand j'ai trouvé une solution.
v_vince_v
Messages postés2Date d'inscriptionjeudi 16 décembre 2004StatutMembreDernière intervention 6 décembre 2007 6 déc. 2007 à 17:43
dommage de faire des copy avec un dispose() cela aurait tout simplement fonctionné...
(ou avec un garbage collector qui libere tous les objets inutilisé)