尝试在asp.net中删除文件时出错

时间:2013-04-05 09:45:50

标签: c# asp.net visual-studio-2008 itextsharp

我在文字中有一个html数据,我使用scan.pdf从该html创建一个pdf文件说iTextsharp。但是当我尝试使用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();
    }

4 个答案:

答案 0 :(得分:1)

生成PDF文件后,您可能没有处置资源。通常通过在相应对象上调用“Close”和/或“Dispose”方法来完成。

如果对象实现IDisposable,则可以使用using构造。这样,一旦执行通过using块,资源就会被释放(这也保证了即使using块中存在异常也释放了资源。)

答案 1 :(得分:1)

在Textsharp中保存文件后,您仍然使用该文件,因为您没有cleaned文件的所有句柄。您的编写器可能不在使用块中,通过检查它们是否是一次性的,可以查看应该处理哪些其他类。如果找到它们,请确保将它们丢弃,以便释放所有手柄。

一些示例代码:

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

删除必须在您的使用区之外。如果仍有错误,请检查您使用该文件的代码(将其发送给客户端等)。

答案 2 :(得分:1)

实际上我忘了释放邮件附件对象,这就是我收到错误的原因。当我把这段代码attachment.Dispose();时,错误就被清除了。

答案 3 :(得分:0)

我之前从未使用过这个Textsharp库,但我猜你可以通过在using块中创建文件来解决这个问题:

using(PdfWriter MyWriter=PdfWriter.GetInstance(Document,Stream))
{
...
}

或简单地在其上调用.dispose():

MyWriter.Dispose()

如果您可以显示您的代码,则有助于调试问题的确切位置。