1

私がやりたいこと - ネストされた 2 つの for ループがあります。Outer は文字列 filename を生成し、filename が存在しない場合は作成します。inner は filename に書き込む文字列を生成します。このファイル名に文字列を追加します。このプロセスは、必要なファイル名ごとに繰り返されます。

使ってみた(部分コード) -

string path = @"path here";
File.Create(path);
StreamWriter file = new StreamWriter(path, true);

outer for loop{
file.WriteLine(strMsg);
}

file.Close();

ファイルは作成されますが、何も書き込まれず、エラーが発生します - ファイル 'xyz' は別のプロセスによって使用されています。これを修正するには?

4

3 に答える 3

4

このFile.Createメソッドは、ファイルを作成して開きます。戻り値を無視していFileStreamます。つまり、閉じられていません。

次に、でファイルを開こうとするとStreamWriter、既に開かれているため、失敗します。

この場合、File.Create完全に省略してください。 StreamWriterのコンストラクターがファイルを作成します。

using(StreamWriter file = new StreamWriter(path, false))
{
    for // ... outer for loop
    {
        file.WriteLine(strMsg);
    }
} 
于 2013-10-29T17:44:59.280 に答える
3

ファイル ロックを解除するには、作成されたストリーム オブジェクトを破棄する必要があります。File.Create特に、破棄されないため、作成されたばかりのファイルを引き続きロックします。

string path = @"path here";
File.Create(name).Dispose();  // Kill the lock immediately.
using (StreamWriter file = new StreamWriter(path, true))
{
outer for loop{
file.WriteLine(strMsg);
}
// Stream will close automatically when leaving the using block.
于 2013-10-29T17:45:51.840 に答える
0

File.Create は、無視している FileStream を返します。

おそらく、このようなものはもっとありますか?

using (FileStream fs = File.Create(path)) {}

それ以外の場合はコードをそのままにして、問題を解決できますか?

于 2013-10-29T17:45:33.463 に答える