У мене проблема із закриттям бази даних перед спробою видалити файл. Код справедливий
myconnection.Close();
File.Delete(filename);
І функція Delete видає виняток, що файл все ще використовується. Я повторно спробував Delete () в налагоджувачі через кілька хвилин, тому це не проблема часу.
У мене є код транзакції, але він взагалі не запускається до виклику Close (). Тож я впевнений, що це не відкрита транзакція. Команди sql між відкриттям та закриттям - це лише вибір.
ProcMon показує мою програму та антивірус, які переглядають файл бази даних. Це не відображає мою програму, що випускає файл db після закриття ().
Visual Studio 2010, C #, System.Data.SQLite версія 1.0.77.0, Win7
Я бачив дворічну помилку саме так, але в журналі змін говориться, що це виправлено.
Чи є ще щось, що я можу перевірити? Чи є спосіб отримати список будь-яких відкритих команд або транзакцій?
Новий, робочий код:
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);