我对位于 Windows 打印假脱机目录“C:\Windows\System32\spool\PRINTERS”内的影子文件 (.shd) 中的一些信息感兴趣。每次启动打印作业时,都会在该目录中创建一个假脱机文件 (.spl) 和一个影子文件 (.shd)。到目前为止,我已经成功检测到打印作业何时开始,并且能够暂停该打印作业。如果您不暂停作业,文件最终会进入打印机,然后被 Windows 删除。
我的问题是。我无法打开 .SHD 文件,因为它们被锁定,当它们被 sprint spooler 打开时您无法读取它们。我什至尝试在 Windows 资源管理器中访问该文件,然后将文件复制到另一个文件,但这也不起作用。我可以打开的 .SPL 假脱机文件。我只是等待,并且后台处理程序很快就会释放该文件。但是,对于影子文件,它会永久保留该文件。不幸的是,它是我需要的。
我专门用来打开文件的代码行如下:
m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
我得到的 IOException 是:
该进程无法访问文件“C:\Windows\system32\spool\PRINTERS\FP00083.SHD”,因为它正被另一个进程使用。
所以是的,它正在被另一个进程使用。它被窗口的打印后台处理程序服务使用。但我认为我对此无能为力。我要做的就是读取文件。我不想对其进行任何更改。有什么我可以在这里做的还是我只是搞砸了?