我正在使用下面的代码在本地驱动器中创建一个包含内容的文件.
File.WriteAllLines(path, contents);
Run Code Online (Sandbox Code Playgroud)
我将此文件附加到邮件中并发送给团队.一旦发送邮件我需要删除该文件,删除我在下面的代码使用的文件,但我收到运行时错误
File.Delete(path);
Run Code Online (Sandbox Code Playgroud)
错误消息:进程无法访问该文件,因为它正被另一个进程使用
默认情况下,WriteAllLines()方法关闭文件但仍由另一个进程打开.我只能在一段时间后通过执行代码来删除文件,但这不是场景.邮件发送后我需要删除它.
更新
System.Net.Mail.MailMessage mailMessage = new System.Net.Mail.MailMessage();
mailMessage.To.Add(new System.Net.Mail.MailAddress(recipient, ToName));
mailMessage.From = new System.Net.Mail.MailAddress(From, FromName);
mailMessage.Subject = Subject; // "Outlook calendar as attachment"; // modified by Srikanth J on 28/06/2012
mailMessage.Body = "This is a test message";
System.Net.WebClient webclient = new System.Net.WebClient();
webclient.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
for (int i = 0; i < item.Attachments.Count; i++)
{
string url = item.Attachments.UrlPrefix + item.Attachments[i];
SPFile file = item.ParentList.ParentWeb.GetFile(url);
mailMessage.Attachments.Add(new System.Net.Mail.Attachment(file.OpenBinaryStream(), file.Name));
}
System.Net.Mail.Attachment mailAttachment = new System.Net.Mail.Attachment(path);
mailMessage.Attachments.Add(mailAttachment);
smtp.Send(mailMessage);
Run Code Online (Sandbox Code Playgroud)
任何帮助都是适当的,谢谢.
小智 15
MailMessage实现IDisposable,因此您应该使用using关键字在完成任务后释放任何资源.如果你不这样做,是的,很可能文件仍在使用,直到垃圾收集器发现你不再使用该消息为止.
using (var mailMessage = new MailMessage())
{
// set mailMessage properties
// ...
smtp.Send(mailMessage);
}
Run Code Online (Sandbox Code Playgroud)
您也可以Dispose直接调用附件,但处理消息已经确保所有子对象(包括附件)都能正确处理.
| 归档时间: |
|
| 查看次数: |
8655 次 |
| 最近记录: |