【问题标题】:C# WIA Image Scanning fails with HRESULT: 0x80070050C# WIA 图像扫描失败并显示 HRESULT:0x80070050
【发布时间】:2011-09-01 13:04:38
【问题描述】:

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

【问题讨论】:

    标签: c# wia image-scanner


    【解决方案1】:

    解决了。

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

    Path.GetTempPath()
    

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

    文件以 imgXXXX.tmp 格式存储

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

    设置一个例程从这个临时文件夹中清除旧图像文件立即解决了这个问题。

    【讨论】:

      【解决方案2】:

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

      Marshal.ReleaseComObject(Image1);
      

      我在 CodePrjoct 上找到了这个,link

      【讨论】:

        猜你喜欢
        • 2017-05-05
        • 1970-01-01
        • 2013-05-29
        • 2015-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-05-08
        • 2021-07-09
        相关资源
        最近更新 更多