0

いくつかのファイルを保存する必要があるWebアプリを作成しました。このアプリは、Visual Web Developer 2010 Expressを使用してC#で開発しました。プログラムはVWDで問題なく実行されますが、サーバーに展開すると問題が発生します。特に問題の1つは、保存されているファイルが何らかのプロセスによって保持されており、必要なときにアクセスしたり削除したりできないことです。ファイルストリームを適切に閉じていると思います。このような保存の例を次に示します。

string[] lines = MessagesTextbox.Text.Split(new string[] { Environment.NewLine }, StringSplitOptions.None);
string messagesFileLocation = currDir + "\\" + reportDir + "\\" + messagesFile;
FileStream fs2 = File.Open(messagesFileLocation, FileMode.Create, FileAccess.Write);
using (StreamWriter sw = new StreamWriter(fs2))
{
    sw.WriteLine("<Messages>");
    foreach (string message in lines)
    {
        if (!message.Equals(""))
        {
            sw.WriteLine("\t<message>" + message + "</message>");
        }
    }
    sw.WriteLine("</Messages>");
}
fs2.Close();

この問題は、HtmlAgilityPackを使用してレンダリングされたHTMLをファイルに保存するときにも発生します。

開発環境とサーバーの唯一の違いは、サーバー上でアプリがIISで実行されていることです。私の開発環境では発生しないのに、IISを使用してこの問題が発生する可能性がある理由を誰かが考えることができますか?サーバーを管理する人は、それが私のコードである必要があると考えていますが、私が言ったように、サーバーはこれらの問題のいずれもなしに自分のマシンで数週間実行されています。

任意の提案をいただければ幸いです。

よろしく。

4

1 に答える 1

2

例外がスローされた場合、FileStreamfs2は閉じられません。を使用してそれ自体をラップすると無料で取得できるfinallyブロックで閉じる必要があります。

IDisposableを実装するものはすべて、適切なコーディング慣行の問題として、 usingブロックにラップする(または一部の高度なケースでは破棄する)必要があります。それが問題にならないことを確認するためのエッジケースがありますが、インターフェイスを実装するオブジェクトが不要になったらすぐにIDisposable.Dispose()が呼び出されるようにすることは確かな習慣です。

于 2012-08-27T20:53:48.797 に答える