我正在尝试使用iTextSharp
库将PDF文件加载到一个新PDF中,并且我想在完成此操作后删除单个文件(从.DOC格式转换)。 / p>
这是附加所有文件的最后一段代码,这就是我认为问题所在:
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));
之前,我可以使用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 '\\file\IT\SK\test\HR Policies and Procedures Acceptance Form.pdf' because it is being used by another process.
我尝试在pdf和pdfDoc变量上调用.Close()和.Dispose(),但没有成功。
我还检查了我当前使用Process Explorer运行的进程,但有很多我不知道从哪里开始。
有没有人对如何克服这个问题有任何想法?
答案 0 :(得分: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();
}
}
}
这是有道理的,因为那是实际捕获文件的变量。虽然我尝试Dispose of / Close的其他进程正在操作文件,但PdfReader变量代表实际的pdf文件。
修改已添加pdf.Close();
和pdfDoc.Close();
,因为没有这些,pdf最终文件已损坏