2016-01-26 593 views
0

概述:为什么Tiff.Open方法总是返回NULL而不打开一个tiff文件?

我有一个问题,即1出一百岁电脑刚开始具有与该图书馆的libtiff不想打开任何我的TIFF图像的问题。我怀疑它必须处理已经改变的依赖文件。我以前见过这个问题,但不记得我是如何解决这个问题的(我想我用另一台正在工作的PC替换了一些dll文件)。我尝试使用Dependency Walker来确定LibTiff.Net dll使用了哪些文件,但无法使Dependency Walker正常工作,它只是在打开一堆dll时出错。

问:

是否有可能知道为什么文件没有被成功打开?所有的方法是返回NULL,有没有办法得到某种类型的错误?我知道这些文件没有锁定(重新启动,并以其他方式检查)。我知道tiff文件很好,没有任何问题(将它们复制到使用相同软件的另一台PC上,并且它读取的很好)。我可以使用“GetLastError”之类的东西来返回Open方法返回Null的原因吗?

这里是我当前使用情况:

using BitMiracle.LibTiff.Classic; 

using (Tiff tImage = Tiff.Open(sFileName, "r")) 
{ 
    if (tImage == null) 
    { 
     //File could not be opened 
     lastError = "File could not be opened."; 
     return null; 
    } 
} 

回答

0

移动而从我的评论答案:

它可以确定,但是你需要单独做检查,因为Tiff.Open做不会抛出异常。它打开文件或返回null。我想加个if(!File.Exists(sFileName)) throw new FileNotFoundException("File was not found.", sFileName);。如果文件存储在网络驱动器中并且该驱动器暂时不可用,那么这可能是一个重要的问题。

另请参阅此question/answer用于检查文件是否被锁定。这将是它无法打开文件的另一个重要原因。如果图像文件是由您的代码或其他应用程序打开的,并且资源未释放,则它将保持锁定状态。这里是链接讨论的代码:

protected virtual bool IsFileLocked(FileInfo file) 
{ 
    FileStream stream = null; 

    try 
    { 
     stream = file.Open(FileMode.Open, FileAccess.Read, FileShare.None); 
    } 
    catch (IOException) 
    { 
     //the file is unavailable because it is: 
     //still being written to 
     //or being processed by another thread 
     //or does not exist (has already been processed) 
     return true; 
    } 
    finally 
    { 
     if (stream != null) 
      stream.Close(); 
    } 

    //file is not locked 
    return false; 
} 

通常,您应该在试图打开它之前执行自己的检查;或者你可以尝试打开它并检查它是否返回null,然后你可以做你的检查。这真的取决于你,因为它不会抛出自己的例外。

+0

我实际上做了我自己的检查BUNCH其他原因。虽然这是疯狂的事情......我看不出为什么它不应该打开TIFF!它确实存在,它是100%的好tiff,它不以任何方式锁定,并且应用程序(使用TibTiff.Net dll)和tiff图像放在另一台机器上似乎没有任何问题。 :/ –

+0

是否所有机器都运行相同版本的Windows并安装了相同版本的.Net框架?他们是否也是相同的硬件(32 vs 64)? – gmiley

+0

是的所有帐户。它们都是运行Windows 7的64位计算机,并且都安装了Dot Net Framework 4(客户端和扩展)。这些都是成像站,因此它们是相同的。我可以对车站进行重新映像,但这是一个巨大的痛苦,因为它很遥远。我宁愿找出哪些文件已经改变。我尝试卸载框架,重新启动,然后重新安装。这产生了相同的结果。我也尝试重新安装我的应用程序。 –

相关问题