web-dev-qa-db-ja.com

File.Createの後にファイルを閉じる

ファイルが存在するかどうかを確認します

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

ただし、この新しく作成したファイルでStreamReaderを作成しようとすると、次のようなエラーが表示されます。

プロセスは別のプロセスで使用されているため、ファイル「[my file path here]」にアクセスできません。

作成後に閉じるように呼び出すことができるFile.Close(myPath)がないので、後でプログラムで開くことができるようにこのリソースを解放するにはどうすればよいですか?

72
John

File.Create(string)FileStream class のインスタンスを返します。このオブジェクトで Stream.Close() メソッドを呼び出して、オブジェクトを閉じ、使用しているリソースを解放できます。

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

ただし、FileStreamIDisposable を実装しているため、 using statement (一般的にこのような状況を処理するための好ましい方法)を利用できます。これにより、ストリームが終了したときにストリームが閉じられ、適切に破棄されます。

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

関数はFileStreamオブジェクトを返します。したがって、戻り値を使用してStreamWriterを開くか、オブジェクトの適切なメソッドを使用して閉じることができます。

File.Create(myPath).Close();
46
Mario

File.Createは、Close() onで呼び出すことができるFileStreamオブジェクトを返します。

その理由は、ファイルを作成するメソッドからFileStreamが返されるためです。 FileStreamを変数に戻すか、File.Createの後に変数から直接closeメソッドを呼び出す必要があります。

Usingブロックを使用して、このようなタスクのIDisposeパターンを実装できるようにすることをお勧めします。おそらくもっとうまくいくかもしれないものは次のようになります:

if(!File.Exists(myPath)){
   using(FileStream fs = File.Create(myPath))
   using(StreamWriter writer = new StreamWriter(fs)){
      // do your work here
   }
}
3
t3rse
File.WriteAllText(file,content)

書き込みを閉じる

File.WriteAllBytes--   type binary

:)

2
danis