2013-03-26 49 views
0

我使用Microsoft.Office.Interop.MailItem從電子郵件中去除附件,將它們保存到磁盤,將它們打印出來然後從磁盤上刪除它們。我在刪除JPG附着物的問題,該文件似乎有一個鎖,如何釋放JPG文件上的鎖

這裏是我救了每個attachement代碼,

foreach (Attachment attachment in outLookMessage.Attachments) 
{ 
    var fileNameOnDisk = FileNameOnDisk(printFileFolder, attachment.FileName); 

    attachment.SaveAsFile(fileNameOnDisk); 
} 

我不知道爲什麼會出現在JPG鎖文件。有什麼辦法可以發佈這個日誌,以便我可以刪除文件?

+0

什麼是FileNameOnDisk?它是否是一種將文件保存到指定文件夾的方法?我無法在API中一目瞭然,如果是這樣的話,就可能在這種方法中創建了鎖(例如,因爲當保存一個句柄時,它就會被打開)。 – Chris 2013-03-26 12:44:12

+0

打印附件的代碼是什麼?你也可以在那裏留下一個開放的手柄。 – 2013-03-26 12:54:07

回答

3

我會嘗試在刪除它們之前使用attachment.Dispose()

+0

附件是一個接口,並不一定實現IDisposable(儘管實現它的類可能)。 – plinth 2013-03-26 12:39:29

0

最可能的原因是文件已經存在(並且正在被保存)或者您沒有執行該操作的權限。第一個幾乎可以肯定的情況下

如果該文件存在,爲什麼你在寫它?這可能不是你想要做的。 更好地檢查文件是否存在,以及是否在寫入之前鎖定並在需要時更改名稱。 The second answer in this question有一些代碼用於確定文件是否被鎖定(更具體地說,不僅僅是IOException)。

關於克里斯對這個問題的評論(好主意,克里斯),如果文件存在,被鎖定並且長度爲0,很可能是FileNameOnDisk中的自己的錯。如果你返回一個路徑(最好),或者以共享的讀/寫方式打開它,關閉你打開的內容,並返回文件流並在完成時關閉它(不是最好的)。