2011-05-25 99 views
1

我希望有人遇到過這種情況 - 我試圖使用WIA從文檔掃描儀捕獲圖像,但是在隨機機器上嘗試傳輸圖像結果時 - WIA報告「該文件存在。 - HRESULT:0x80070050)」。在出現此問題的所有機器上,軟件的初次使用是成功的。C#WIA圖像掃描失敗,HRESULT:0x80070050

我能夠成功連接到掃描儀,查詢名稱,製造商等。

我確定我可以成功掃描圖像,如果我在替代用戶帳戶下運行代碼(使用右鍵單擊以管理員身份運行)。但是,在具有提升權限的相同用戶帳戶下運行代碼會導致相同的錯誤。

注意:在Item1.Transfer上發生異常 - 直到此時我還沒有向WIA提供文件路徑,所以這不能是它所指的文件。

WIA.DeviceManager DeviceManager1 = new WIA.DeviceManagerClass(); 
WIA.Device Scanner = DeviceManager1.DeviceInfos[i].Connect(); 

WIA.Item Item1 = null; 
foreach (WIA.Item CurrentItem in Scanner.Items) { 
    Item1 = CurrentItem; 
    break; 
} 

WIA.ImageFile Image1 = new WIA.ImageFile(); 

//Attempt To Capture Scan 
Image1 = (WIA.ImageFile)Item1.Transfer(WIA.FormatID.wiaFormatJPEG); 

//Save To File 
Image1.SaveFile(Path.Combine(Path.GetTempPath(), Path.GetRandomFileName() + @"\scan" + DateTime.Now.Ticks + ".jpg"); 

最合乎邏輯的答案是,WIA被存儲在圖像拍攝期間的臨時文件 - 我是不知道的 - 這是無法覆蓋以前的掃描。有誰知道這可能是哪裏?

回答

3

已解決。

原來,WIA實際上將拍攝到的圖像作爲臨時文件在用戶配置文件的臨時文件夾,所以:

Path.GetTempPath() 

或C:\用戶\ USER_PROFILE \應用程序數據\本地的\ Temp \

文件存儲格式爲imgXXXX.tmp

在我們的案例中 - 這導致了一個問題,這似乎沒有記錄在網絡上的任何地方的原因是,我們每隔幾秒就對掃描程序進行輪詢 - 創建一個臨時文件,因爲只有4x,可以有一個最大o f WIA之前的65K臨時文件將會出錯。

設置例程以清除此臨時文件夾中的舊映像文件,立即解決了問題。

1

當試圖使用WIA從相機設備讀取圖像時遇到了同樣的問題。正確的解決方案是妥善處置WIA.ImageFile。這清理了tmp文件。

Marshal.ReleaseComObject(Image1); 

我發現這對CodePrjoct,link