试图在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();
    }

试图在asp.net中删除文件时出现错误

在生成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()

如果你能展示你的代码,这将有助于调试你的问题的确切位置。