c# - 尝试删除数据库文件时出现 "file in use by another process"错误

标签 c# winforms

我有一个使用的 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/

相关文章:

c# - 为什么不能在类中声明 const static string

C# - 创建随机获取值的枚举

wpf - 调整托管数百个类似控件的 WPF 应用程序性能

c# - 如何让一个Windows窗体始终显示在最上面?

c# - System.Globalization.CultureInfo 不包含 Name 的定义

c# - 此 SqlCeParameterCollection 已包含具有此名称的 SqlCeParameter。错误

c# - 使用显示的 Gridview 列名称填充下拉列表

c# - 更改数据源时更新绑定(bind)控件的更好方法

c# - 将窗体停靠在 MDI 上

winforms - 如何在 C# WinForm 应用程序中播放电影