2013-02-08 14 views
5

基本的にはファイルが存在しない場合は作成し、それにメッセージを書きたいとします。StreamWriterを使用しているときにプロセスがファイルにアクセスできない

if (!File.Exists(filePath + fileName)) 
    File.Create(filePath + fileName); 
StreamWriter sr = new StreamWriter(filePath + fileName,false); 

このエラーを処理するにはどうすればよいですか?

プロセスは、別のプロセスで使用されているため、ファイル 'c:\ blahblah'にアクセスできません。

答えて

14

File.Createは、FileStreamhttp://msdn.microsoft.com/en-us/library/d62kzs03.aspx)を開きます。

処分しなかったため、ファイルがロックされたままになり、他のハンドル(他のFileStreamまたは全体がStreamWriter)から実行された場合、ファイルへの後続のアクセスは失敗します。

このコードは、FileStreamのようなIDisposableオブジェクトを操作する方法を示しています。

if (!File.Exists(filePath + fileName)) 
{ 
    File.Create(filePath + fileName).Dispose(); 

    using(StreamWriter sr = new StreamWriter(filePath + fileName,false)) 
    { 

    } 
} 
+2

なぜFile.Createで気になるのですか?ファイルへのパスをStreamWriterのコンストラクタに渡し、使用しない余分なオブジェクトを作成しないでください。 –

+0

@ChrisDunawayええ、確かに、私は "2番目の部分がファイルにアクセスできない理由"に答えていました。ええと。 –

3

理由だけではなく、ファイル名になりますStreamWriterコンストラクタを使用していませんか? MSDNから

StreamWriter sr = new StreamWriter(filePath + fileName); 

は:

パスパラメータは、汎用名前付け規則(UNC)共有上のファイルを含め、ファイル名を指定できます。 ファイルが存在する場合は上書きされます。そうしないと、新しいファイルが作成されます。

非常にマイナーなポイントがありますが、ファイル名やフォルダパスを連結する際Path.Combineの使用を検討できます。

+0

まずそれを作成して、それが存在するかどうか確認する必要がありますか? –

+0

あなたは見積もりを読んだことがありますか? 'ファイルが存在する場合は上書きされます。さもなければ、**新しいファイルが作成されます**。 –

2

ファイルを作成して開くには、単一のメソッドを使用して、あなたのコードを簡素化:

using (FileStream fs = File.OpenWrite(path)) 
{ 
    Byte[] info = new UTF8Encoding(true) 
         .GetBytes("This is to test the OpenWrite method."); 

    fs.Write(info, 0, info.Length); 
} 

MSDN:(File.OpenWrite Method

は、既存のファイルを開くか、書き込み用に新しいファイルを作成します。

+0

これはより多くのupvotesを持っているはずです。 – Rob

関連する問題