Windows 印刷スプール ディレクトリ "C:\Windows\System32\spool\PRINTERS" 内にあるシャドウ ファイル (.shd) 内の情報に興味があります。印刷ジョブが開始されるたびに、スプール ファイル (.spl) とシャドウ ファイル (.shd) がそのディレクトリに作成されます。これまでのところ、印刷ジョブがいつ開始されたかを検出することに成功し、その印刷ジョブを一時停止することができました。ジョブを一時停止しないと、ファイルは最終的にプリンターに送られ、Windows によって削除されます。
私の問題です。.SHD ファイルは、sprint スプーラーで開いている間は読み取れないようにロックされているため、開くことができません。Windowsエクスプローラーでファイルにアクセスして、そのファイルを別のファイルにコピーしようとしましたが、それもうまくいきませんでした。ただし、開くことができる .SPL スプール ファイル。待つだけで、すぐにスプーラがそのファイルをリリースします。ただし、シャドウ ファイルの場合は、このファイルを永続的に保持します。残念ながら、それは私が必要とするものです。
ファイルを開くために特に使用しているコード行は次のとおりです。
m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
私が得る IOException は次のとおりです。
別のプロセスで使用されているため、プロセスはファイル 'C:\Windows\system32\spool\PRINTERS\FP00083.SHD' にアクセスできません。
はい、別のプロセスで使用されています。ウィンドウの印刷スプーラ サービスによって使用されています。しかし、それについて私にできることは何もないと思います。私がしたいのは、ファイルを読むことだけです。私はそれを変更したくありません。ここで私にできることはありますか?