Phương pháp web của tôi tạo tệp pdf trong thư mục% temp% của tôi và hoạt động. Sau đó tôi muốn thêm một số trường tùy chỉnh (meta) vào tệp đó bằng cách sử dụng mã bên dưới.Không thể truy cập tệp vì nó đang được sử dụng bởi một quy trình khác
Lớp PdfStamper
tạo IOException
, cho dù tôi sử dụng phương thức .Close()
hoặc khối using
của nó chỉ kết thúc. Quá trình đó vẫn còn giữ trên để xử lý tập tin là máy chủ web webdev chính nó (tôi đang gỡ lỗi trong VS2010 SP1).
private string AddCustomMetaData(string guid, int companyID, string filePath)
{
try
{
PdfReader reader = new PdfReader(filePath);
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.ReadWrite, FileShare.ReadWrite))
{
PdfStamper st = new PdfStamper(reader, fs);
Dictionary<string, string> info = reader.Info;
info.Add("Guid", guid);
info.Add("CompanyID", companyID.ToString());
st.MoreInfo = info;
st.Close();
}
reader.Close();
return guid;
}
catch (Exception e)
{
return e.Message;
}
}
Không có vấn đề gì tôi cố gắng, nó giữ ném ngoại lệ tại st.Close();
, để được chính xác hơn:
Quá trình không thể truy cập các tập tin 'C: \ Users [username tôi] \ AppData \ Local \ Temp \ 53b96eaf-74a6-49d7-a715-6c2e866a63c3.pdf ' vì nó đang được sử dụng bởi một tiến trình khác.
Hoặc tôi đang xem điều gì đó hiển nhiên hoặc có vấn đề với lớp học PdfStamper
Tôi chưa biết. Các phiên bản của itextsharp được sử dụng là 5.3.3.0 và 5.4.0.0, vấn đề là như nhau.
Mọi thông tin chi tiết sẽ được đánh giá cao.
EDIT: Tôi hiện đang "mã hóa xung quanh" vấn đề, nhưng tôi chưa tìm thấy giải pháp nào.
bạn có chắc chắn rằng tệp không được sử dụng trước khi trình đọc pdf mở nó không? (như bạn đang làm gì với tệp này trước đó) – Sayse
tốt hơn, hãy thử chuyển đổi thứ tự mở tệp của bạn ('filestream' trước 'trình đọc pdf') – Sayse