C# WIA 图像扫描失败,错误码为 HRESULT: 0x80070050。

3
我希望有人能够遇到这个问题 - 我正在尝试使用WIA从文档扫描仪中捕获图像,但在尝试传输图像结果时,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在图像捕获期间存储了一个临时文件 - 我不知道的 - 并且无法覆盖以前的扫描。有人知道这可能在哪里吗?
2个回答

6

问题已解决。

事实上,WIA将捕获的图像存储为用户配置文件临时文件夹中的临时文件,因此:

Path.GetTempPath()

或 C:\Users\USER_PROFILE\AppData\Local\Temp\

文件以 imgXXXX.tmp 的格式存储。

在我们的案例中,这引起了一个问题,但似乎在互联网上没有记录。我们每隔几秒钟轮询扫描仪 - 创建一个临时文件。由于只有4个“x”,在WIA出现故障之前最多可以有65K个临时文件。

建立一个例程,立即清除此临时文件夹中的旧图像文件,即可解决该问题。


2
我尝试使用WIA从相机设备读取图像时遇到了同样的问题。正确的解决方案是正确处置WIA.ImageFile。这将清除临时文件。
Marshal.ReleaseComObject(Image1);

我在CodeProject上找到了这个链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接