Envoi SMTP est le verrouillage de mes fichiers - c#
J'ai une fonction c'est l'envoi de messages ( beaucoup) et de leurs pièces jointes.
Essentiellement, il parcourt une structure de répertoire et crée des e-mails à partir d'un fichier de structure par exemple
c:\emails\message01
\attachments
c:\emails\message02
\attachments
La création des messages s'effectue à l'aide .net c#, norme des choses.
Après tous les messages sont créés... j'ai une autre fonction qui s'exécute directement après que des copies du dossier de messages vers un autre emplacement.
Problème est - fichiers sont verrouillés...
Note: je ne suis pas déplacer les fichiers, juste à les copier....
Des suggestions sur la façon de copier des fichiers verrouillés à l'aide de c#?
Mise à jour
J'ai cette ajouter des pièces jointes méthode
private void AddAttachments(MailMessage mail)
{
string attachmentDirectoryPath = "c:\messages\message1";
DirectoryInfo attachmentDirectory = new DirectoryInfo(attachmentDirectoryPath);
FileInfo[] attachments = attachmentDirectory.GetFiles();
foreach (FileInfo attachment in attachments)
{
mail.Attachments.Add(new Attachment(attachment.FullName));
}
}
Vous devez vous connecter pour publier un commentaire.
Comment êtes-vous de lire les fichiers pour créer le message e-mail? Ils devraient être ouvert en lecture seule, avec un
FileShare
ensemble deFileShare.ReadWrite
... alors ils ne devraient pas être verrouillé. Si vous utilisez unFileStream
vous devez également placer votre logique dans lausing
mot-clé, de sorte que les ressources soient éliminés correctement.Mise à jour:
Je crois que l'élimination du courrier électronique lui-même va se fermer ressources et de déverrouiller les fichiers:
haine de répondre à mon propre post, mais oui pour la prochaine pauvre mec qui a ce problème voici la solution:
APRÈS AVOIR ENVOYER LE MESSAGE
Disposer les pièces jointes... efface la serrure, et les messages seront toujours envoyés avec les pièces jointes. Disposer NE supprime PAS les fichiers, efface simplement les pièces jointes 🙂
MailMessage
lui-même (de préférence en l'enveloppant dans unusing
bloc). LeDispose
méthode de laMailMessage
dispose également toutes les pièces jointes.Êtes-vous de fermer les fichiers après avoir fini de les lire? Si vous les ouvrez pour la lecture, mais ne pas les fermer lorsque vous avez terminé, il doit conserver un verrou sur elle jusqu'à ce que le programme s'arrête et se ferme automatiquement tous les fichiers.
Je vois cela beaucoup lors de l'envoi de pièces jointes. J'ai l'habitude d'utiliser quelque chose comme ce qui suit:
Dans le code qui déplace les fichiers dans un autre emplacement, vous pouvez utiliser le modèle suivant:
L'intérieur de la boucle pour parcourir les fichiers