我希望有人遇到过这种情况 - 我正在尝试使用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在图像捕获期间存储了一个临时文件 - 我不知道 - 它无法覆盖以前的扫描。有谁知道这可能在哪里?
答案 0 :(得分:5)
解决。
事实证明,WIA实际上将捕获的图像存储为用户配置文件临时文件夹中的临时文件,因此:
Path.GetTempPath()
或C:\ Users \ USER_PROFILE \ AppData \ Local \ Temp \
文件以imgXXXX.tmp
格式存储在我们的案例中 - 导致问题的原因,似乎没有在网上的任何地方记录,是我们每隔几秒轮询一次扫描仪 - 创建一个临时文件,因为只有4x,可以在WIA出错之前,最多可以使用65K临时文件。
设置例程以清除此临时文件夹中的旧图像文件,立即解决了问题。
答案 1 :(得分:1)
当我尝试使用WIA从相机设备上读取图像时,我遇到了同样的问题。正确的解决方案是正确处理WIA.ImageFile。这会清理tmp文件。
Marshal.ReleaseComObject(Image1);
我在CodePrjoct link
上找到了这个