2017-07-18 41 views
0

請原諒我對MailMessage和SmtpClient類的新意。我已經構建了一些基本上可行的東西,但在準備發送附件時,我有時會將附件複製到臨時文件位置(Path.GetTempPath() + @"\" + timestampWithFF),因爲它們有時必須壓縮才能發送。發生這種情況時,我想確保在發送後刪除那些文件(特別是因爲任何事情會相對較大)。MailMessage發送後刪除附件,如果在Path.GetTempPath()

雙重問題: 1.我應該不打擾清理文件,因爲操作系統(win7)會做得很好嗎? 2.如何獲得附件中的HDD位置client.SendCompleted

client.SendCompleted += (s, e) => 
{ 
    client.Dispose(); 
    foreach(Attachment a in msg.Attachments) 
    { 
     // want to actually delete the file from the HDD if it's in Path.GetTempPath(); 
    } 
    msg.Dispose(); 
}; 

我看我可以使用a.Dispose(),但我沒有任何想法它做什麼...我懷疑這是處置的對象(其中msg.Dispose會做下一個反正),但將在保留原文件HDD。

我必須分別發送附件的文件路徑嗎? client.SendCompleted()行在: sendMailAsync(SmtpClient client, MailMessage msg)方法。我可以將其更改爲: sendMailAsync(SmtpClient client, MailMessage msg, List<string> attachments) ,這增加了SendCompleted(),但感覺有點笨重:

string tempDir = Path.GetTempPath(); 
foreach(string f in attachments) 
{ 
    if(f.Contains(tempDir)) // want to actually delete the file from the HDD if it's in Path.GetTempPath(); 
    { 
     if (File.Exists(f)) { File.Delete(f); } 
    } 
} 

回答

2
  1. 我不應該與清理文件,因爲操作系統(WIN7)會做煩它的好工作?

如果我是你,我仍然會刪除臨時文件,儘管操作系統將清理它,認爲必要時

  • 我怎樣才能客戶端中的附件的HDD位置。發送完成?
  • 附件中的文件可以通過ContentStream檢索。他們的類型將是FileStream

    client.SendCompleted += (s, e) => 
    { 
        client.Dispose(); 
        var fileattachments = msg.Attachments 
              .Select(x => x.ContentStream) 
              .OfType<FileStream>() 
              .Select(fs => fs.Name) 
              .ToArray(); 
    
        msg.Dispose(); 
    
        string tempPath = Path.GetTempPath(); 
        foreach (var attachment in fileattachments) 
        { 
         if(attachment.Contains(tempPath) 
         { 
          File.Delete(attachment); 
         } 
    
        } 
    }; 
    

    注:首先處置msg對象,然後做刪除

    +0

    嗯...這似乎如此接近正確的,但我發現從選擇零個元素。我認爲在Select(fs => fs.Name)之後需要一個.ToArray()(或類似的),因爲否則fileattachments不會在msg.Dispose之後被評估,所以沒有什麼可以循環。 – Keith

    +0

    對不起我的壞。我從頭腦中寫下來,回憶起我過去的那些日子,完全錯過了'.ToArray();'。感謝編輯! :)希望在添加'ToArray'之後,你就能解決這個問題 –

    相關問題