我有一个使用的 PC.sdf
文件。我关闭了连接,我需要删除它。
我这样打开连接:
bool OpenConn()
{
try
{
Conn = new SqlCeConnection(String.Format(@"Data Source={0}\{1}", PathI, "PC.SDF"));
Conn.Open();
return true;
}
catch
{
//MessageBox.Show(err.Message, "Connetion error");
return false;
}
}
我这样关闭它:
Conn.Close();
Conn.Dispose();
我尝试这样删除它:
if (File.Exists(@"\myPath\PC.sdf"))
File.Delete(@"\myPath\PC.sdf");
但我收到此错误:另一个进程正在使用文件
。此错误可能是什么原因造成的,我该如何解决?
最佳答案
你可以尝试通过运行来强制垃圾回收
GC.Collect();
在关闭并处置数据库对象后执行此操作。
这当然只有在它是对该数据库文件的唯一引用时才有效。
编辑:回答关于您不应该使用 GC.Collect 来“修复”其他问题的评论。
我不认为这是因为另一个问题。垃圾收集器在运行时选择的不确定时间运行。这意味着您不能指望在以下两行之间处理您的对象。
Conn.Dispose();
//Nothing says GC will run exactly now
File.Delete(@"C:\Some-file-used-by-Conn.db");
您的选择是强制垃圾收集或以某种方式延迟删除。
关于c# - 尝试删除数据库文件时出现 "file in use by another process"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7222882/