3

文字列の配列をファイルに書き込もうとしていますが、これは通常は簡単なことです。ただし、次の単純なコードは、ファイルが別のプロセスによって使用されていることを示す IOException をスローしています。問題は、このコードが実行されるまでファイルが存在しないことです。そして、そのファイルを使用するプロセスが他にないことを保証できます。では、愚かな .NET フレームワークに、ファイルが別のプロセスで使用されておらず、続行しても問題ないことを納得させるにはどうすればよいでしょうか? これはそれほど難しいことではないはずだからです。

StreamWriter writer = new StreamWriter(ListFileName);

foreach (string s in InfoLineList) 
{
    writer.WriteLine(s);
}
4

1 に答える 1

4

これは、処理が完了したときにストリームを閉じていないために発生する可能性があるため、一部のハンドルがどこかで開いたままになっている可能性があります。コードが Web アプリの一部であり、Web サーバー プロセスがそのロックを保持しているか、コードが複数回実行されている可能性があります。usingブロックでストリームを使用することをお勧めします。

using(StreamWriter writer = new StreamWriter(ListFileName))
{
   foreach (string s in InfoLineList) 
   {
       writer.WriteLine(s);
   }
}

これにより、StreamWriterが適切に廃棄されます。

何がファイルを開いているのか本当に知りたい場合は、 SysInternal のハンドル ツールを使用して確認してください。私はそれがあなた自身のプログラムであることを喜んで賭けます。

最後に、コメントで述べたように、File.WriteAllLines()メソッドは列挙可能な文字列のリストを一度にファイルに書き込むことができます。

File.WriteAllLines(ListFileName, InfoListList);
于 2012-11-29T21:04:28.633 に答える