【问题标题】:How to wait new file to be released如何等待新文件发布
【发布时间】: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 成功了。我不确定除了检查之外,人们会如何观看发布。

标签: c#-4.0 filelock


【解决方案1】:

为什么需要在创建附件时将文件写入磁盘并再次读取?我猜你可以在从就绪字符串创建附件时使用方法。

// Attach the message string to this e-mail message.
Attachment data = new Attachment(textMessage, MediaTypeNames.Text.Plain);
data.Name = "test.csv";

在这里找到:http://msdn.microsoft.com/ru-ru/library/9089e309(v=vs.110).aspx 或者试试这个方法:http://msdn.microsoft.com/ru-ru/library/ms144617(v=vs.110).aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-02
    • 1970-01-01
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多