试图在asp.net中删除文件时出现错误
本文关键字:文件 错误 删除 asp net | 更新日期: 2023-09-27 18:07:38
我在文字中有一个html数据,我使用iTextsharp
从html中创建一个pdf文件说scan.pdf
,但是当我试图使用file . delete()方法删除创建的pdf文件时,它显示了一个错误,如
D:'Hosting'filepath'scan.pdf'因为它正在被其他进程使用
我怎么解决它?
这是用于从HTML创建PDF文件并将其作为附件发送给某些mailid的代码
string MailFormat = searchDt.Rows[0][1].ToString();
EmalBody.Append(MailFormat);
EmalBody.Replace("[Date]", DateTime.Today.ToString());
string emailbody = EmalBody.ToString();
message.Body = EmalBody.ToString();
***HTMLToPdf(emailbody, "scan.pdf");***
System.Net.Mail.Attachment attachment;
attachment = new System.Net.Mail.Attachment(Server.MapPath("scan.pdf"));
message.Attachments.Add(attachment);
message.IsBodyHtml = true;
message.Subject = "";
smtpClient.Send(message);
File.Delete("D://filepath//scan.pdf");
public void HTMLToPdf(string HTML, string FilePath)
{
Document document = new Document();
PdfWriter.GetInstance(document, new FileStream("D:''filepath''scan.pdf",FileMode.Create));
document.Open();
iTextSharp.text.html.simpleparser.StyleSheet styles = new iTextSharp.text.html.simpleparser.StyleSheet();
iTextSharp.text.html.simpleparser.HTMLWorker hw = new iTextSharp.text.html.simpleparser.HTMLWorker(document);
hw.Parse(new StringReader(HTML));
document.Close();
}
在生成PDF文件之后,您可能没有处理资源。通常是通过调用相应对象上的"Close"和/或"Dispose"方法来完成的。
如果对象实现了IDisposable
,则可以只使用using
结构。这样,一旦执行通过using
块,资源就会被释放(这也保证了即使using
块内部出现异常,资源也会被释放)。
在Textsharp中保存文件后,您仍然可以使用该文件,因为您没有cleaned
文件的所有句柄。您的编写器可能不在using块中,通过检查它们是否可丢弃来查看哪些其他类应该被丢弃。如果您发现了它们,请确保将它们处理掉,这样所有句柄都将被释放。
一些示例代码:
using (FileStream stream = new FileStream(temp_filename, FileMode.Create))
{
iTextSharp.text.Document document = new iTextSharp.text.Document();
PdfWriter writer = PdfWriter.GetInstance(document, stream);
...
}
// Do the delete after using block
delete必须在using块之外。如果你仍然有错误检查代码,你正在使用的文件(发送到客户端等)。
实际上我忘记释放邮件附件对象,这就是为什么我得到了错误。当我把这个代码attachment.Dispose();
错误被清除。
我以前从未使用过这个Textsharp库,但我猜你可以通过在using块中创建文件来解决这个问题:
using(PdfWriter MyWriter=PdfWriter.GetInstance(Document,Stream))
{
...
}
或者简单地调用.dispose():
MyWriter.Dispose()
如果你能展示你的代码,这将有助于调试你的问题的确切位置。