Невозможно удалить PDF-файл После добавления в другой PDF-файл - C# - ItextSharp


Я пытаюсь добавить загрузку PDF-файлов в один новый PDF, используя библиотеку iTextSharp, и я хотел бы удалить отдельные файлы (которые были преобразованы из .Формат DOC) после того, как это было сделано.

Это последний фрагмент кода, в который вложены все файлы, и именно здесь, я думаю, кроется проблема:

    static void Concat(string targetPdf, string[] newPdfFiles)
    {
        using (FileStream stream = new FileStream(targetPdf, FileMode.Create))
        {
            iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(PageSize.A4);

            PdfCopy pdf = new PdfCopy(pdfDoc, stream);
            pdfDoc.Open();
            int i = 1;
            foreach (string file in orderedlist)
            {
                if (!(file.Contains("HR Policies and Procedures Guide")))
                {
                    var newFileName = "\\file\IT\SK\test\" + file.Split('.')[0] + ".pdf";
                    pdf.AddDocument(new PdfReader(newFileName));
                }
                i++;
            }

            pdf.Close();
            pdfDoc.Dispose();
        }
    }

Перед использованием pdf.AddDocument(new PdfReader(newFileName));, я могу удалить любой из PDF-файлов без каких-либо проблем, используя System.IO.File.Delete("\\Path\To\File.pdf");

Однако, если я попытаюсь сделать это после запуска AddDocument, Я вижу следующее исключение:

An unhandled exception of type 'System.IO.IOException' occurred in     mscorlib.dll

Additional information: The process cannot access the     file '\fileITSKtestHR Policies and Procedures Acceptance Form.pdf' because it is being used by another process.

Я пытался дозвониться .Близкий и .Dispose () для переменных pdf и pdfDoc без какого-либо успеха.

Я также проверил, какие процессы я в настоящее время запускаю с помощью Process Explorer, но их так много, что я понятия не имею, с чего начать.

Есть ли у кого-нибудь идеи о том, как я могу преодолеть это?
1 2

1 ответ:

Как упоминалось в комментарии Skuzzbox, фактическим виновником здесь был PdfReader, который я первоначально объявлял одновременно с вызовом pdf.AddDocument (см. вопрос).

Однако, объявив это сначала, вызвав его, а затем избавившись только от этой переменной, освободил pdf-файл от использования, так что я был свободен удалить его:

    static void Concat(string targetPdf, string[] newPdfFiles)
    {
        using (FileStream stream = new FileStream(targetPdf, FileMode.Create))
        {
            iTextSharp.text.Document pdfDoc = new iTextSharp.text.Document(PageSize.A4);

            PdfCopy pdf = new PdfCopy(pdfDoc, stream);
            pdfDoc.Open();
            foreach (string file in orderedlist)
            {
                if (!(file.Contains("HR Policies and Procedures Guide")))
                {
                    var newFileName = "\\\\file\\IT\\SK\\test\\" + file.Split('.')[0] + ".pdf";

                    PdfReader test = new PdfReader(newFileName);
                    pdf.AddDocument(test);
                    test.Dispose();

                    // Delete the individual pdf ..
                    System.IO.File.Delete(newFileName);
                }

                pdfDoc.Close();
                pdf.Close(); 
            }
        }
    }

Это имеет смысл, так как это переменная, которая фактически перехватывала файл. В то время как другие процессы, от которых я пытался избавиться / закрыть, были манипулируя файлами, переменная PdfReader представляет фактический pdf-файл.

Edit добавлено pdf.Close(); и pdfDoc.Close(); , поскольку без них окончательный файл pdf был поврежден