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 に答える