3

私は C# と Asp.net を初めて使用します。

私の Web アプリは、フォルダーに pdf (iTextSharp) ファイルを作成し、結果を別の Web ページに投稿します。誰かがページに戻って、同じ名前の新しい 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 に答える