进程无法访问文件'文件名'因为它正在被另一个进程使用

本文关键字:进程 另一个 文件名 访问 文件 因为 | 更新日期: 2023-09-27 17:49:16

我是c#新手,我有一个连接到火鸟数据库的问题。我希望我的程序访问火鸟数据库[FDB格式文件]。我有问题,见下面的代码:

File.Copy(pathway, new_pathway, true);
FbConnection addDetailsConnection = new FbConnection("User=sysdba;Password=masterkey;Dialect=3;Database= " + new_pathway +
    ";DataSource=localhost;" );
string SQLCOMMAND = " SELECT UOM FROM ST_ITEM_UOM WHERE CODE = 'ANT'";
addDetailsConnection.Open();
FbCommand readCommand = new FbCommand(SQLCOMMAND, addDetailsConnection);
FbDataReader myreader = readCommand.ExecuteReader();
while (myreader.Read())
{
    MessageBox.Show(myreader[0].ToString());
}
myreader.Close();
readCommand.Dispose();
addDetailsConnection.Close();
addDetailsConnection.Dispose();

这段代码让我读取我的FDB文件并提取数据。当代码第一次执行时,没有错误或问题,但是当我再次执行时,显示这个错误:

进程无法访问文件"C:'Users'ACC-0001"。FDB',因为它正在被另一个进程使用。

进程无法访问文件'文件名'因为它正在被另一个进程使用

您可以使用Handle来检查哪个程序正在锁定文件。它可能是由您的代码引起的,也可能是由您机器上运行的其他进程引起的。

工具标识进程,例如:

C:> handle.exe C: ' test.xlsx

版权所有(C) 1997-2011 Mark Russinovich Sysinternals -www.sysinternals.com

EXCEL.EXE pid: 3596类型:文件414:C:'test.xlsx

在这里找到

如果问题在你的代码中,确保你处理并关闭所有的连接,最好是在using节中使用它们:

using (FbConnection addDetailsConnection = new FbConnection("...")) 
{
    // do work
}

更多关于使用using的细节可以在这里找到

您可能遇到过这个Firebird问题:FB服务器报告DB文件被另一个应用程序通过符号链接

使用辅助附件尝试

它只发生在Windows上,并且只有当两个非嵌入式连接使用不同的路径名时,其中一个或两个连接在其路径中都有一个符号链接,因此它们有效地指向相同的位置。

handle.exeProcess Explorer将只显示fbserver.exe实际打开的规范(最终)文件名。

唯一的方法是:

  1. 比较连接字符串
  2. handle.exeProcess Explorer验证文件确实是由fbserver.exe打开的(而不是由进程本身使用嵌入式连接打开的)