Cannot access the file because it is being used by another process
Solution 1
Your problem is that you are writing to a file while you are also reading from it. Unlike some file types (JPG, PNG, etc) that "load" all of the data into memory, iTextSharp reads the data as a stream. You either need to use two files and swap them at the end or you can force iTextSharp to "load" the first file by binding your PdfReader
to a byte array of the file.
PdfReader reader = new PdfReader(System.IO.File.ReadAllBytes(filePath));
Solution 2
I suggest you to use the FileShare enumerator
when you open the file, so Try to open a file with None sharing
File.Open(fileName, FileMode.Open, FileAccess.Read, FileShare.None);
Wim Ombelets
Software developer with a love for snooker, music, science & technology, cinema, graphics & design and becoming a better software developer. Current focus on (asp).net core, Angular, web api, ef core, Sql Server, MongoDb, various web technologies, application design & architecture.
Updated on July 05, 2022Comments
-
Wim Ombelets almost 2 years
My web method creates a pdf file in my %temp% folder and that works. I then want to add some custom fields (meta) to that file using the code below.
The class
PdfStamper
generates anIOException
, whether I use its.Close()
method or theusing
block just ends. The process that is still holding on to the file handle is the webdev web server itself (I'm debugging in 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; } }
No matter what I try, it keeps throwing the exception at
st.Close();
, to be more precise:The process cannot access the file 'C:\Users[my username]\AppData\Local\Temp\53b96eaf-74a6-49d7-a715-6c2e866a63c3.pdf' because it is being used by another process.
Either I'm overlooking something obvious or there's a problem with the
PdfStamper
class I'm as of yet unaware of. Versions of itextsharp used are 5.3.3.0 and 5.4.0.0, the issue is the same.Any insight would be greatly appreciated.
EDIT: I'm currently "coding around" the issue, but I haven't found any solution.