【发布时间】:2013-12-05 07:11:24
【问题描述】:
我正在创建一个新的 *.csv 文件,创建后我想将此文件作为附件发送到电子邮件中,但文件被锁定 10 - 15 秒。有什么方法可以等待文件被释放,然后发送这个文件而不会出现任何异常:进程无法访问该文件,因为它正在被另一个进程使用。
File.WriteAllText("test.csv", sb.ToString(),Encoding.UTF8);
SendMail();
private static void SendMail()
{
MailMessage mail = new MailMessage("from", "to");
SmtpClient client = new SmtpClient();
client.Port = 25;
client.DeliveryMethod = SmtpDeliveryMethod.Network;
client.UseDefaultCredentials = false;
client.Host = "host";
mail.Subject = "this is subject";
mail.Body = "this is body";
mail.Attachments.Add(new Attachment("test.csv"));
mail.IsBodyHtml = true;
client.Send(mail);
}
如果我使用 Thread.Sleep() 等待,我可以成功发送电子邮件,但我不想使用它。我不知道文件操作完成的确切时间。它是一个控制台应用程序。有什么建议吗?
【问题讨论】:
-
File.WriteAllText 应该在完成后立即关闭文件。出了点问题。您可以尝试使用 StreamWriter 并显式打开和关闭它。否则,您的应用程序之外的某些东西可能正在对其进行篡改。
-
这很奇怪,但 File.WriteAllText 不会立即关闭文件。 StreamWriter 解决了我的问题。谢谢你。顺便说一句,我只是想知道有什么方法可以等待文件释放或任何类似 filerelease_completed 的事件?
-
很高兴听到 StreamWriter 成功了。我不确定除了检查之外,人们会如何观看发布。