考虑以下C#代码:
try
{
using (new PdfReader(filename))
{
}
}
catch
{
}
finally
{
File.Delete(filename);
}如果filename指向非pdf文件,PdfReader构造函数会抛出异常(不出所料),但也不会释放它内部创建的FileStream,尽管它是在using块中调用的。因此,尝试删除finally块中的文件时会引发异常The process cannot access the file '<filename>' because it is being used by another process.
事实上,如果构造函数抛出异常,它应该不会导致锁定任何资源。因此,即使在没有using块的情况下调用PdfReader构造函数,上面的代码也应该删除非pdf文件。
显而易见的解决方法是实例化PdfReader,如下所示:
using (var fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.Read))
using (new PdfReader(fileStream))
{
}它确实可以工作,但是使用filename参数的PdfReader构造函数重载的当前行为是不被期望的。
发布于 2021-06-01 19:38:28
这确实是iText的一个bug,但这是一个已知的问题,并且已经在最新的开发版本中得到了修复。iText 7.1.16版本将包含此修复,但如果您现在需要此修复,您可以使用artifactory https://repo.itextsupport.com/webapp/#/artifacts/browse/tree/General/snapshot中的快照版本
https://stackoverflow.com/questions/67725102
复制相似问题