У меня есть приложение Windows Forms, которое хранит PDF-файлы в виде байтовых массивов в базе данных (не мой выбор, но я не настраивал базу данных ...).Я хочу, чтобы пользователь мог просматривать один из этих сохраненных файлов, щелкая обычную кнопку «Просмотр документа».
С кодом, который у меня есть сейчас, байты записываются в файл на диске, а затем открываются с помощью внешнего процесса (программа чтения PDF по умолчанию на компьютере пользователя).Проблема заключается в том, что если они снова нажимают кнопку «просмотреть документ» перед закрытием файла, возникает исключение, потому что открытый файл не может быть перезаписан.
Поскольку я использовал Process.Start () дляоткрыть файл, я пробовал различные способы убить процесс, но я не могу найти способ получить процесс по имени файла (а не какой-либо программе чтения открывает файл, который неизвестен приложению).
Соответствующий код внутри обработчика щелчков является базовым:
File.WriteAllBytes("document.pdf", PDFBytes)
Process.Start("document.pdf")
(PDFBytes - это байтовый массив, document.pdf - это просто путь, который я использую для сохранения файла перед его открытием.. Он будет перезаписываться каждый раз, когда пользователь нажимает кнопку «Просмотр документа», что нормально).
Ожидаемый результат: пользователь может нажать «Просмотр документа», чтобы открыть PDF несколько раз, и файл будетзакройте и снова открывайте каждый последующий щелчок без проблем.
Фактический результат: первый щелчок открывает документ очень хорошо, следующий щелчок (без закрытия файла первым) выдает «System.IO.IOException: запрошенная операция не может быть выполненадля файла с открытым разделом, отображенным пользователем. "