2016-01-06 39 views
2

我有一个关于ASP.NET 5 MVC C#中的临时文件的问题。 我想生成一个ics文件,然后将其存储为一个临时文件,使用邮件发送它,然后删除该文件。 我试图在我的本地主机。我正在启动应用程序,然后执行API GET调用(通过浏览器.... net/api /引号),并在GET方法中启动sendMailWithIcal方法。在我调用API之后,我停止了Visual Studio中的应用程序。用TempFileCollection删除ASP.NET MVC C#中的临时文件

通过搜索stackoverflow,我发现TempFileCollection。问题是我发送邮件后无法删除文件。我尝试在两种不同的方式,以 “System.IO.File.Delete(路径)” 或 “tempFiles.Delete()”:

public void SendMailWithICal(string receiver, string subject, string textBody) 
    { 

     this._msg = new MailMessage(UserName, receiver); 
     this._msg.Subject = subject; 
     this._msg.Body = textBody; 

     CalenderItems iCalender = new CalenderItems(); 
     iCalender.GenerateEvent("Neuer Kalendereintrag"); 

     var termin = iCalender.iCal; 

     using (var tempFiles = new TempFileCollection()) 
     { 
      tempFiles.AddFile("TempIcsFiles/file3.ics", false); 
      System.IO.File.WriteAllText("TempIcsFiles/file3.ics", termin.ToString()); 

      Attachment atm = new Attachment("TempIcsFiles/file3.ics"); 
      this._msg.Attachments.Add(atm); 

      System.IO.File.Delete(("TempIcsFiles/file3.ics")); //Either i try this 
      //tempFiles.Delete();     //or this 
      } 
     this._smtpClient.Send(_msg); 
    } 

如果我有System.IO.File尝试。删除,我收到一个异常,它无法访问文件,因为它被另一个进程使用。如果我使用tempfiles.Delete(),没有例外,它会发送邮件,但文件不会从文件夹TemprocsFiles中删除wwwroot文件夹内

感谢您的帮助。

编辑: 我试图解决Mikeal Nitell与此代码:

var termin = iCalender.iCal; 

     using (var tempFiles = new TempFileCollection()) 
     { 
      tempFiles.AddFile("TempIcsFiles/file6.ics", false); 

      //tempFiles.Delete(); 
      System.IO.File.WriteAllText("TempIcsFiles/file6.ics", termin.ToString()); 

      Attachment atm = new Attachment("TempIcsFiles/file6.ics"); 

      this._msg.Attachments.Add(atm); 
      this._smtpClient.Send(_msg); 
      this._msg.Dispose(); 
      atm.Dispose(); 
     } 
     System.IO.File.Delete(("TempIcsFiles/file6.ics")); 

现在我接受,因为另一个进程正在使用它,已经与“系统行,我不能访问该文件IOException异常。 IO.File.WriteAllText(...)“

如果我取消注释此行,我会收到一个FileNotFoundException一行后面的初始化附件。

回答

2

您需要处置您的MailMessage。它保持对附加文件的锁定,并且直到消息对象被释放后才释放这些锁定。这就是为什么当你试图删除文件时你会得到一个异常,这也是为什么TempFileCollection不能删除它的原因。

因此,您需要将MailMessage放入using语句中,或者在处理TempfileCollection之前显式调用Dispose。

+0

感谢您的答复,我尝试过,但仍有一些问题。我编辑了我的问题。 – davidrue