オブジェクトを1分ごとにxmlファイルにシリアル化するタイマー関数があります。しばらくは動作しますが、約38時間後、以下のIO例外が発生します。
スクリーンショットでわかるように、ディレクトリがそこにあることがわかります。また、この問題が発生した場合は、dosに次のコマンドを入力することもできます。echo "test"> test.xmlを使用すると、その正確なディレクトリ位置にtest.xmlファイルを作成できます。
私のコードは次のとおりです。
try
{
if (!Directory.Exists(filePath))
this.log.Write(LogLevel.Fatal, this.componentName, "Directory not exists: " + filePath);
lock (lockObject)
{
filepath = filepath + "ApplicationState.xml";
if (File.Exists(filePath))
File.Delete(filePath);
if (this.StateObject != null && !File.Exists(filePath))
{
using (Stream sWrite = File.Create(filePath))
{
this.Serializer = new XmlSerializer(typeof(State));
this.Serializer.Serialize(sWrite, this.StateObject);
}
}
}
}catch (Exception ex)
{
if (this.log != null)
{
this.log.Write(ex, this.componentName);
}
}
finally
{
if (this.StreamWriter != null)
{
this.StreamWriter.Close();
}
bRun = true;
}
私は最善を尽くしてコードを調べて、ぶら下がっているIOリソースがないことを確認しようとしましたが、この時点で正直に言うとかなり途方に暮れています...ウィンドウCEまたはC#には何らかの種類のロックリソースがありますか?ファイルを開いて読み取るために使用するもの以外の一般的なIO?