Majid
Majid

Reputation: 39

IO Exception in C#

In my c# application which developed with c# in visual studio 2012 I created a file by this command : System.IO.File.Create("config.conf"); after that in the next line I want to use the file by this command : System.IO.StreamReader rd = new System.IO.StreamReader("config.conf"); But I get This exception :

"The process cannot access the file '\config.far' because it is being used by >another process."

I used thread.sleep(2000) to make application wait but still it doesn't answer.

I will appropriate any help.

Upvotes: 0

Views: 292

Answers (5)

Nahuel Ianni
Nahuel Ianni

Reputation: 3185

When working with files, it is always a good idea to dispose of the file once you are done.

This can be done by two different techniques, the most popular one is using a "using" statement:

using (FileStream fileStream = File.Create(fileNamePath))
{
    // insert logic here, for example:
    fileStream.SetLength(fileSize);
}

The other one, is calling the .Dispose method.

Upvotes: 0

Onur Okyay
Onur Okyay

Reputation: 300

using(var conf = System.IO.File.Create("config.conf"))
{
    using (var rd = new System.IO.StreamReader(conf))
    {
        // Do whatever you want to do with the file here
    }

}

Upvotes: 1

Thorsten Dittmar
Thorsten Dittmar

Reputation: 56727

The problem is that File.Create returns a stream to the file. That is: The file is already opened for you!

You could do this:

using (System.IO.StreamReader rd = new System.IO.StreamReader(System.IO.File.Create("config.conf")))
{
   ...
}

By the way, this does not really make sense. What do you expect an empty, newly created file to contain?

Upvotes: 0

Lasse V. Karlsen
Lasse V. Karlsen

Reputation: 391634

File.Create creates the file and returns a FileStream holding the file open.

You can do this:

System.IO.File.Create("config.conf").Dispose();

by disposing of the returned stream object, you close the file.

Or you can do this:

using (var stream = File.Create("config.conf"))
using (var rd = new StreamReader(stream))
{
    .... rest of your code here

Additionally, since disposing of the StreamReader will also dispose of the underlying stream, you can reduce this to just:

using (var rd = new StreamReader(File.Create("config.conf")))
{
    .... rest of your code here

Final question: Why are you opening a newly created stream for reading? It will contain nothing, so there's nothing to read.

Upvotes: 5

leskovar
leskovar

Reputation: 661

Close the file if it is opened in notepad or something similar.

Upvotes: -3

Related Questions