进程无法访问文件'文件名'因为它正在被另一个进程使用
本文关键字:进程 另一个 文件名 访问 文件 因为 | 更新日期: 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.comEXCEL.EXE pid: 3596类型:文件414:C:'test.xlsx
在这里找到
如果问题在你的代码中,确保你处理并关闭所有的连接,最好是在using
节中使用它们:
using (FbConnection addDetailsConnection = new FbConnection("..."))
{
// do work
}
更多关于使用using
的细节可以在这里找到
您可能遇到过这个Firebird问题:FB服务器报告DB文件被另一个应用程序通过符号链接
使用辅助附件尝试它只发生在Windows上,并且只有当两个非嵌入式连接使用不同的路径名时,其中一个或两个连接在其路径中都有一个符号链接,因此它们有效地指向相同的位置。
handle.exe
和Process Explorer
将只显示fbserver.exe
实际打开的规范(最终)文件名。
唯一的方法是:
- 比较连接字符串
- 用
handle.exe
或Process Explorer
验证文件确实是由fbserver.exe
打开的(而不是由进程本身使用嵌入式连接打开的)