2016-01-26 132 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(客戶端和擴展)。這些都是成像站,因此它們是相同的。我可以對車站進行重新映像,但這是一個巨大的痛苦,因爲它很遙遠。我寧願找出哪些文件已經改變。我嘗試卸載框架,重新啓動,然後重新安裝。這產生了相同的結果。我也嘗試重新安裝我的應用程序。 –

相關問題