फ़ाइल को हटाने के प्रयास से पहले मुझे अपने डेटाबेस को बंद करने में समस्या हो रही है। कोड बस है
myconnection.Close();
File.Delete(filename);
और हटाएं एक अपवाद को फेंकता है जो फ़ाइल अभी भी उपयोग में है। मैंने डिबगर में डिलीट () को कुछ मिनटों के बाद फिर से करने की कोशिश की है, इसलिए यह समय का मुद्दा नहीं है।
मेरे पास लेनदेन कोड है, लेकिन यह बंद () कॉल से पहले बिल्कुल नहीं चलता है। इसलिए मुझे पूरा यकीन है कि यह एक खुला लेनदेन नहीं है। खुले और बंद के बीच sql कमांड केवल चयन हैं।
ProcMon मेरा प्रोग्राम और मेरा एंटीवायरस डेटाबेस फ़ाइल को देख रहा है। यह बंद () के बाद db फ़ाइल को जारी करने के लिए मेरे कार्यक्रम को नहीं दिखाता है।
विज़ुअल स्टूडियो 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);
SQLiteAsyncConnection.ResetPool()
, विवरण के लिए इस मुद्दे को देखें।