无法删除FileHelper程序集创建的文件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了无法删除FileHelper程序集创建的文件相关的知识,希望对你有一定的参考价值。

我从db获取详细信息并使用FileHelper将其写入文件,将该文件作为电子邮件的一部分附加,并尝试在发送邮件后删除该文件。

 var engine = new FileHelperEngine<DataModel>();

 engine.WriteFile(filePath, data);

 //After Mail is sent, deleting the file.
 if (File.Exists(filePath))
 {                           
   File.Delete(filePath); //Error is thrown here
 }

例外:进程无法访问文件'..//somefilepath',因为它正由另一个进程使用。

我必须在邮件发送后立即删除这些文件,让它们驻留在服务器上会消耗服务器中的空间。

如何在被其他进程保留时删除这些文件?

编辑:谢谢大家的回复。由于Attachment实例持有该文件并且不允许我删除该文件,因此问题发生了。

MailMessage mailobj= new MailMessage();
Attachment data = new Attachment(filePath);
mailobj.Attachments.Add(data);

//after sending mail, i disposed the data
 data.Dispose();
答案

问题不在于问题中的代码。 WriteFile()函数自动打开,写入和关闭文件,因此文件不会继续使用。当您尝试删除文件时,邮件客户端仍然是使用该文件的罪魁祸首。在尝试删除文件之前,请确保它已完成并释放文件。如果您需要帮助,请编辑您的问题并添加用于发送邮件的代码。

注意:某些邮件客户端可以在成功发送文件后自动删除它们。检查您的邮件客户端是否具有该功能并启用它,因此您无需自行删除该文件。

一些邮件客户端也接受内存流。如果您的邮件客户端接受内存流,您可以考虑将数据保存到MemoryStream并将其传递给邮件客户端而不是文件。这样您就不必担心创建和删除文件了。

另一答案

如果有另一个进程(例如本地电子邮件客户端)访问/链接文件,则必须在File.Delete之前关闭此进程。也许您可以尝试使用MemoryStream将文件复制到可以处理的内存中,而不是直接使用该文件,以确保该文件不被其他进程使用,然后您可以执行File.Delete。

以上是关于无法删除FileHelper程序集创建的文件的主要内容,如果未能解决你的问题,请参考以下文章

无法加载测试程序集“* .dll”。错误详细信息:找不到文件* .dll'

无法加载文件或程序集“Newtonsoft.Json”或它的某一个依赖项

FileNotFoundException:“无法加载文件或程序集”尽管程序集存在 [关闭]

阅读Microsoft Word文档时出现Android Apache POI错误:org.apache.xmlbeans.SchemaTypeLoaderException无法解析句柄的类型(代码片

arcgis无法创建netcdf栅格数据集

无法加载文件或程序集。找到的程序集的清单定义与程序集引用不匹配