无法删除由 FileHelper 程序集创建的文件
Unable to delete a file created by FileHelper assembly
我正在从数据库中获取详细信息并使用 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
}
Exception : The process cannot access the file '..//somefilepath'
because it is being used by another process.
我必须在邮件发送后立即删除这些文件,让它们驻留在服务器上会占用服务器 space。
如何删除这些被其他进程占用的文件?
编辑:感谢大家的回复。
出现此问题是因为附件实例持有该文件并且不允许我删除该文件。
MailMessage mailobj= new MailMessage();
Attachment data = new Attachment(filePath);
mailobj.Attachments.Add(data);
//after sending mail, i disposed the data
data.Dispose();
问题不是来自问题中的代码。 WriteFile()
函数自动打开、写入和关闭文件,因此文件不会一直在使用中。当您尝试删除文件时,邮件客户端是仍在使用该文件的罪魁祸首。在您尝试删除文件之前,请确保它已完成并释放该文件。如果您需要这方面的帮助,请编辑您的问题并添加用于发送邮件的代码。
注意:部分邮件客户端发送成功后会自动删除文件。检查你的邮件客户端是否有该功能并启用,这样你就不需要自己删除文件了。
还有一些邮件客户端接受内存流。如果您的邮件客户端接受内存流,您可以考虑将数据保存到 MemoryStream
并将其传递给邮件客户端而不是文件。这样你就不用担心文件的创建和删除了。
如果有另一个进程(例如本地电子邮件客户端)accessing/linking 文件,您必须在 File.Delete 之前关闭此进程。也许不是直接使用该文件,您可以尝试 MemoryStream 将文件复制到您可以处理的内存中,以确保该文件不被另一个进程使用,然后您可以执行 File.Delete.
我正在从数据库中获取详细信息并使用 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
}
Exception : The process cannot access the file '..//somefilepath' because it is being used by another process.
我必须在邮件发送后立即删除这些文件,让它们驻留在服务器上会占用服务器 space。
如何删除这些被其他进程占用的文件?
编辑:感谢大家的回复。 出现此问题是因为附件实例持有该文件并且不允许我删除该文件。
MailMessage mailobj= new MailMessage();
Attachment data = new Attachment(filePath);
mailobj.Attachments.Add(data);
//after sending mail, i disposed the data
data.Dispose();
问题不是来自问题中的代码。 WriteFile()
函数自动打开、写入和关闭文件,因此文件不会一直在使用中。当您尝试删除文件时,邮件客户端是仍在使用该文件的罪魁祸首。在您尝试删除文件之前,请确保它已完成并释放该文件。如果您需要这方面的帮助,请编辑您的问题并添加用于发送邮件的代码。
注意:部分邮件客户端发送成功后会自动删除文件。检查你的邮件客户端是否有该功能并启用,这样你就不需要自己删除文件了。
还有一些邮件客户端接受内存流。如果您的邮件客户端接受内存流,您可以考虑将数据保存到 MemoryStream
并将其传递给邮件客户端而不是文件。这样你就不用担心文件的创建和删除了。
如果有另一个进程(例如本地电子邮件客户端)accessing/linking 文件,您必须在 File.Delete 之前关闭此进程。也许不是直接使用该文件,您可以尝试 MemoryStream 将文件复制到您可以处理的内存中,以确保该文件不被另一个进程使用,然后您可以执行 File.Delete.