process cannot access the file because it is being used by another process

I am using ASP.NET Webforms with C#. On one page I click submit to create a file on the server.

File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"])
            + landingPage.FriendlyName);

This works fine and creates the file as expected. However, after it does this it redirects to another page, which reads the file that was just created.

var landingPageContent 
       = File.ReadAllText(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) 
                          + landingPage.FriendlyName);

That’s when I get this error.

The process cannot access the file ‘c:codeContentCMSLandingPagesTest2’ because it is being used by another process.

If I restart IIS then the process releases the file and I can load that page and read the file just fine. Is there something I need to do after File.Create in order to close the file before the redirect?

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

Did you close the stream returned by File.Create? The name is a bit confusing (it comes all the way from the bowels of WinAPI), but it creates a file and opens it for writing for you.

Method 2

File.Create returns Filstream, try this:

using (FileStream fs = System.IO.File.Create(...)){}

or shorter:

File.Create(...).Dispose();

Method 3

try replacing:

File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName);

with:

using(File.Create(Server.MapPath(ConfigurationManager.AppSettings["LandingPages"]) + landingPage.FriendlyName))
{}

so the file handle is immedately disposed/released

Method 4

Just close it:

var fileStream = File.Create(...);
fileStream.Close();

If you are doing something with created file it would be better wrapping this logic by using block which finally would close a handle:

using (var stream = File.Create(...))
{
   // logic
}


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x