iTextSharp:进程无法访问文件。文件流似乎已关闭。

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”。

源错误: Line 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

似乎是由w3p IIS Worker Process锁定了PDF文件。几分钟后,文件会恢复正常。

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

谢谢


1
你应该将 FileStream 放在 using 块中,这样当你完成操作后它会自动关闭和释放。 - Ian Kemp
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
}

这将确保您的对象得到适当处理,希望每次都会释放资源,从而避免发生错误。


1
如果 FileStreamusing 语句的一部分,则会隐式地包含在 try 语句中,该语句还包括 finally。因此,除非 FileStream 是空引用,否则将自动调用 Dispose() - kuujinbo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接