我正在开发一个 c# 应用程序,后端为 sqlite。在我的应用程序中,我有一个清理数据库的选项。这意味着当前的 .db 文件将使用 File.Delete 方法删除,然后再次使用 File.create 方法创建空数据库.现在让我解释一下这个问题。
要执行 cleandatabse 任务,我必须停止所有正在运行的进程,这样做之后如果我单击 clean database 它会抛出文件无法删除的错误,它正在被另一个进程使用。我能够停止所有正在运行的线程。
不知何故我能够找到哪个进程正在阻塞文件,
foreach (var process in Process.GetProcesses()) {
var files = GetFilesLockedBy(process);
if (files.Contains(filePath))
{
procs.Add(process);
Console.WriteLine(process.ProcessName);
process.Kill();
File.Delete(filePath);
}
}
但在上面的代码中,我使用了 process.Kill,它关闭了我正在运行的窗口。 在不使用 kill 的情况下,我尝试关闭并处置这对我不起作用。
能否请您帮我在不关闭应用程序的情况下从进程中释放文件,然后删除 db 文件。
提前致谢
最好的问候
桑吉塔。
最佳答案
您应该确保关闭每个打开的流:
using (Stream str = File.Create("C:\\h.txt"))
{
// your code here
} // the stream will be automatically closed here
如果你不把这个using
语句,它会给你带来很多bug,即使你手动关闭它str.Close();
关于c# - 文件正在被另一个进程使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6759741/