3

当然,我是 C# 和 Asp.net 的新手。

我的 Web 应用程序在文件夹中创建一个 pdf (iTextSharp) 文件并将结果发布到另一个网页。当任何人返回页面并重新创建具有相同名称的新 pdf(修改)时,您会收到以下错误:

该进程无法访问文件“C:\inetpub\wwwroot\RAPC\PDF\10-2012_file1.pdf”,因为它正被另一个进程使用。

说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。

异常详细信息:System.IO.IOException:该进程无法访问文件“C:\inetpub\wwwroot\RAPC\PDF\10-2012_file1.pdf”,因为它正被另一个进程使用。

源错误: 第 132 行:

FileStream stream =  new FileStream(path + "/" + subdata + "_" + CodCli + "_" + DrR1_2 + "_" + G_S_2 + "_" + Data_2 + ".pdf", FileMode.Create);*

我的代码:

// Filestream and PDF create

            FileStream stream =  new FileStream(path + "/" + subdata + "_" + CodCli + "_" + DrR1_2 + "_" + G_S_2 + "_" + Data_2 + ".pdf", FileMode.Create);

            PdfWriter.GetInstance(doc, stream);

            doc.Open();

            // Table

            PdfPTable tableX = new PdfPTable(2);
            PdfPCell cell = new PdfPCell();
            tableX.WidthPercentage = 100;
            tableX.DefaultCell.Border = 0;
            cell.AddElement(image);
            cell.PaddingLeft = 30f;
            cell.Border = 0;
            tableX.AddCell(cell);           

            ...

             doc.Close();
             stream.Close();

截图:https ://docs.google.com/open?id=0ByUzt8ssZaf7Z2YtVXlnRmo3SGM

似乎 PDF 已被 w3p IIS 工作进程锁定。几分钟后文件恢复正常。

我希望 pdf 文件立即解锁,以便用户可以修改和重新保存 PDF。

谢谢你

4

1 回答 1

0

正如Ian Kemp在评论中所说,将FileStream对象包装在一个using块中是个好主意。像这样:

using (FileStream stream = new FileStream(path + "/" + subdata + "_" + CodCli + "_" + DrR1_2 + "_" + G_S_2 + "_" + Data_2 + ".pdf", FileMode.Create))
{
    // ...the rest of your code
}

这将确保您的对象得到正确处理,希望每次都释放资源,从而防止该错误发生。

于 2012-10-22T14:38:03.277 回答