2

我希望有人遇到过这个问题 - 我正在尝试使用 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 在图像捕获期间存储了一个临时文件 - 我不知道 - 它无法覆盖以前的扫描。有谁知道这可能在哪里?

4

2 回答 2

5

解决了。

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

Path.GetTempPath()

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

文件以 imgXXXX.tmp 格式存储

在我们的案例中 - 这导致问题的原因似乎没有在网络上的任何地方记录,是我们每隔几秒钟轮询一次扫描仪 - 创建一个临时文件,因为只有 4x,可能有一个最大值在 WIA 出故障之前,有 65K 的临时文件。

设置例程以清除此临时文件夹中的旧图像文件立即解决了该问题。

于 2011-05-26T08:54:13.120 回答
1

在尝试使用 WIA 从相机设备读取图像时,我遇到了同样的问题。正确的解决方案是正确处理 WIA.ImageFile。这会清理 tmp 文件。

Marshal.ReleaseComObject(Image1);

我在 CodePrjoct 上找到了这个,链接

于 2013-06-18T23:50:30.700 回答