1

如果我尝试用 . 打开无效的 TIFF 文件TIFFOpen(),函数将返回NULL. 由于某种原因,没有调用错误处理程序。但是,该文件仍处于打开状态,因此我无法从同一进程中删除/覆盖它。

我尝试使用TIFFFdOpen(),以便我可以自己关闭句柄,但由于某种原因,它在有效 TIFF 上给了我这个错误:“无法读取 TIFF 标头”。这次错误是通过错误处理程序传递的。

我该如何解决这些问题中的任何一个?

更新:我说的是问题TIFFOpen()本身,而不是稍后调用的函数。例如,如果 TIFF 文件的大小为零,它们可能会发生。

4

1 回答 1

0

也许你有一个旧的或损坏的 libtiff?我尝试使用 libtiff-3.8.2,它似乎工作正常:

$ head -c 1000000 sample.tif > broken.tif
$ tiffinfo broken.tif
TIFFReadDirectory: broken.tif: Can not read TIFF directory count.
$ strace tiffinfo broken.tif 
...
open("broken.tif", O_RDONLY)            = 3
...
write(2, "broken.tif: Can not read TIFF dir"...
...
close(3)                                = 0
exit_group(0)                           = ?

IE。有一个正常的错误并且没有泄漏(在退出前明确关闭)。我用自己的代码得到了同样的行为。

于 2009-05-07T12:30:02.770 回答