2011-05-25 62 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