0

いくつかのファイルに書き込むコードは次のとおりです。

StreamWriter writer = new StreamWriter(@"C:\TotalStock\data\points\" + stockName.ToUpper() + ".txt");

for(int i = 0; i < lines; i++)
{
   writer.WriteLine(lineData[i]);
   postGui.Send((object state) =>
    {
       progressBar2.PerformStep();
    }, null);
}

writer.Close();

テキスト ファイルを削除してコードを実行しても問題はありませんが、アプリケーションを閉じてもう一度実行すると、次のエラーが表示されます。このエラーの原因は何ですか?それを止めるにはどうすればよいですか?

エラー:

タイプ 'System.IO.IOException' の未処理の例外が mscorlib.dll で発生しました

追加情報: 別のプロセスで使用されているため、プロセスはファイル 'C:\TotalStock\data\points\IBM.txt' にアクセスできません

4

2 に答える 2

0

marc_sが指摘したように、編集しようとしているファイルが別のアプリケーションによって開かれているため、エラーが発生します。ファイルを他のエディター/ビューアーで開いていないことが確実な場合は、プログラム自体に問題がある可能性があります。

マルチスレッド環境などで、同じコードの複数のインスタンスが同時に実行され、同じファイルへのアクセスが必要な場合。

ファイルに書き込もうとしているときに、アプリケーションの別のコンポーネントがテキスト ファイルから読み取りますか?
アプリケーションがハングし、2 番目のインスタンスに同じファイルが必要ですか?
毎回同じテストを実行しますか?

于 2013-07-24T05:51:09.767 に答える
0

おそらく問題は、ファイルを開いても、プログラムを終了するときにファイルを閉じないことです。StreamWriterデータをファイルに書き込むために使用しているようです。例外が発生する可能性があるため、ファイルを閉じません。ファイルで遊ぶときは、常に次のことを行う必要があります。

try
{
   // Your code with files
}
catch
{
}
finally
{
   writer.Close();
}

他の理由は、他のファイル/ストリーム/などを使用している可能性があります。プログラムを閉じる前に、閉じる必要があるすべてのメンバーを必ず閉じてください。

他に何か忘れていないかどうかを確認したい場合は、すべてのコードを共有してください

Sayse が言っているように、ライターを確実に閉じる別の方法は using ステートメントです。

using(StreamWriter writer = new StreamWriter(@"C:\TotalStock\data\points\" + stockName.ToUpper() + ".txt");)
{
    // Your code of playing with files
}
于 2013-07-24T05:38:57.757 に答える