ExcelをGeneartingするためにEXCEL interopを使用しています。その後、添付ファイルとして添付してmail.Afterメールを送信します。削除にはエラーを投げている:C#アプリケーションでExcel Interopオブジェクトの参照を削除する方法
this file cannot be deleted as it is is used by another process
は、私がSO
や他のサイトで検索してCOMコンポーネントについての興味深い事実を発見しました。
参考: - How do I properly clean up Excel interop objects?
添付ファイルとして添付していない場合は、ファイルが削除されています。私はそれがエラーを投げている添付ファイルとして、それを使用していたときに削除する前に、私はすべてのCOM references.butを削除しています: 私のコードは次のようである:
workbook.SaveAs(root + statics + ".xls", Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange,
Type.Missing, Type.Missing, Type.Missing, Type.Missing);
// Garbage collecting
// Clean up references to all COM objects
// As per above, you're just using a Workbook and Excel Application instance, so release them:
GC.Collect();
GC.WaitForPendingFinalizers();
Marshal.FinalReleaseComObject(m_objRange);
Marshal.FinalReleaseComObject(worksheet);
workbook.Close(false, Type.Missing, Type.Missing);
Marshal.FinalReleaseComObject(workbook);
app.Quit();
Marshal.FinalReleaseComObject(app);
MailMessage mm = new MailMessage("[email protected]", "[email protected]", "TestMsg", "Hi");
SmtpClient client = new SmtpClient("smtp.gmail.com", 587);
client.Credentials = CredentialCache.DefaultNetworkCredentials;
//Commenting Below two lines works fine ....!!!!!!!!!....WHY..???
//Attachment data = new Attachment(root + statics + ".xls");
//mm.Attachments.Add(data);
client.Send(mm);
File.Delete(root + statics + ".xls");
メールにそれを取り付けた後の参照を削除する方法。 おかげ
が
finallyブロックにすべてのコードがありますか? – Steve
これは単なるサンプルコードです。 – Pranav
それはExcelではない、それは添付ファイルだ - http://stackoverflow.com/questions/5191449/file-locked-after-sending-it-as-attachement – dash