ファイルを削除しようとする前にデータベースを閉じるのに問題があります。コードは
myconnection.Close();
File.Delete(filename);
そして、削除はファイルがまだ使用中であるという例外をスローします。数分後にデバッガーでDelete()を再試行したので、タイミングの問題ではありません。
トランザクションコードがありますが、Close()呼び出しの前に実行されません。だから私はそれがオープンな取引ではないと確信しています。openとcloseの間のSQLコマンドは、単に選択するだけです。
ProcMonは、私のプログラムと私のアンチウイルスがデータベースファイルを見ているところを示しています。close()の後でdbファイルを解放するプログラムは表示されません。
Visual Studio 2010、C#、System.Data.SQLiteバージョン1.0.77.0、Win7
私はこのように2年前のバグを見ましたが、変更ログはそれが修正されたと言っています。
他に確認できることはありますか?開いているコマンドまたはトランザクションのリストを取得する方法はありますか?
新しい、機能するコード:
db.Close();
GC.Collect(); // yes, really release the db
bool worked = false;
int tries = 1;
while ((tries < 4) && (!worked))
{
try
{
Thread.Sleep(tries * 100);
File.Delete(filename);
worked = true;
}
catch (IOException e) // delete only throws this on locking
{
tries++;
}
}
if (!worked)
throw new IOException("Unable to close file" + filename);