Невозможно удалить 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 ответ:
Как упоминалось в комментарии 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 был поврежден