开发者

Closing a file after File.Create [duplicate]

开发者 https://www.devze.com 2023-02-13 23:25 出处:网络
This question already has answers here: File being used by another process after using File.Create() (11 answers)
This question already has answers here: File being used by another process after using File.Create() (11 answers) Closed 8 years ago.

I check to see if a file exists with

if(!File.Exists(myPath))
{
    File.Create(myPath);
}

However, when I go to create a StreamReader with this newly created file, I get an error saying that

The process cannot access the file '[my file path here]' because it is being used by another process.

There isn't a File.Close(myPath) that I can call so that it is closed after being created, so 开发者_如何学运维how do I free this resource so that I can open it later in my program?


File.Create(string) returns an instance of the FileStream class. You can call the Stream.Close() method on this object in order to close it and release resources that it's using:

var myFile = File.Create(myPath);
myFile.Close();

However, since FileStream implements IDisposable, you can take advantage of the using statement (generally the preferred way of handling a situation like this). This will ensure that the stream is closed and disposed of properly when you're done with it:

using (var myFile = File.Create(myPath))
{
   // interact with myFile here, it will be disposed automatically
}


The function returns a FileStream object. So you could use it's return value to open your StreamWriter or close it using the proper method of the object:

File.Create(myPath).Close();


File.Create returns a FileStream object that you can call Close() on.


The reason is because a FileStream is returned from your method to create a file. You should return the FileStream into a variable or call the close method directly from it after the File.Create.

It is a best practice to let the using block help you implement the IDispose pattern for a task like this. Perhaps what might work better would be:

if(!File.Exists(myPath)){
   using(FileStream fs = File.Create(myPath))
   using(StreamWriter writer = new StreamWriter(fs)){
      // do your work here
   }
}


File.WriteAllText(file,content)

create write close

File.WriteAllBytes--   type binary

:)

0

精彩评论

暂无评论...
验证码 换一张
取 消