Меня интересует некоторая информация в теневом файле (.shd), расположенном внутри каталога буферизации печати Windows "C: \ Windows \ System32 \ spool \ PRINTERS". При каждом запуске задания на печать в этом каталоге создаются буферный файл (.spl) и теневой файл (.shd). До сих пор я успешно определял, когда началось задание на печать, и смог приостановить это задание. Если вы не приостановите работу, файлы в конечном итоге попадут на принтер, а затем будут удалены окнами.
Моя проблема в том. Я не могу открыть файлы .SHD, потому что они заблокированы таким образом, что вы не сможете прочитать их, пока они открываются спулером спринта. Я даже пытался перейти к файлу в проводнике Windows и просто скопировать файл в другой файл, и это тоже не сработало. Файлы спулинга .SPL, которые я могу открыть, хотя. Я просто жду, и довольно быстро спулер выпускает этот файл. Для теневого файла он постоянно сохраняется в этом файле. К сожалению, это то, что мне нужно.
Строка кода, которую я специально использую для открытия файла, выглядит следующим образом:
m_spoolJobStream = new FileStream(spoolFilePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
IOException, которое я получаю:
Процесс не может получить доступ к файлу 'C: \ Windows \ system32 \ spool \ PRINTERS \ FP00083.SHD', так как он используется другим процессом.
Так что да, он используется другим процессом. Он используется службой очереди печати окна. Но я не думаю, что могу что-то сделать с этим. Все, что я хочу сделать, это прочитать файл. Я не хочу вносить в него какие-либо изменения. Я могу здесь что-нибудь сделать или я просто облажался?