c# — PDF-файл, используемый другой ошибкой процесса в Bitmiracle.Docotic.Pdf

Я пытаюсь изменить метаданные PDF-файла, используяBitmiracle.Docotic.Pdf. Следующий пример я взял со страницы BitMiracle на Github.Metadata.pdf— это существующий PDF-документ на моем компьютере.

      string pathToFile = "Metadata.pdf";
using (PdfDocument pdf = new PdfDocument(pathToFile))
{
    pdf.Info.Author = "Sample Browser application";
    pdf.Info.Subject = "Document metadata";
    pdf.Info.Title = "Custom title goes here";
    pdf.Info.Keywords = "pdf, Docotic.Pdf";
    
    pdf.Save(pathToFile);
}

Я получаю такую ​​ошибку:

System.IO.IOException: процесс не может получить доступ к файлу «Metadata.pdf», поскольку он используется другим процессом.

Как я могу это решить?

2 ответа

Файл заблокирован экземпляром PdfDocument. Вместо этого сохраните их во временный файл или поток и скопируйте временные данные в исходное место после удаления PdfDocument. Образец кода:

      string tempFile = ...;
using (var pdf = new PdfDocument(pathToFile))
{
    ...
    pdf.Save(tempFile);
}

File.Copy(tempFile, originalFileName, true);

Похоже, что другой процесс использует файл и он «заблокирован». Хотя несколько процессов могут получить доступ к файлу в режиме только для чтения, только один может получить доступ к нему в режиме чтения и записи (при этом файл блокируется).

Первым шагом будет выяснение того, какие процессы используют этот файл. Его можно открыть в фоновом режиме Acrobat Reader или даже с помощью Explorer.

Полезный инструмент, который я использую, от Microsoft, который проверяет и может выпускать файлы, называетсяFile Locksmithв ихPowerToysкоммунальные услуги. С его помощью вы можете проверить, открыт ли файл каким-либо другим процессом, кроме вашего кода, и завершить этот процесс, чтобы освободить файл.

https://learn.microsoft.com/en-us/windows/powertoys/file-locksmith

Вы можете получить PowerToys здесь: https://learn.microsoft.com/en-us/windows/powertoys/

Если единственным процессом, использующим файл, является ваш код, это означает, что в коде что-то не так, но поскольку вы сказали, что скопировали из примера на странице документации, маловероятно, что это так.

Другие вопросы по тегам