2016-01-06 82 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