c# - 文件正在被另一个进程使用

标签 c#

我正在开发一个 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/

相关文章:

c# - VB.net 到 C# 等效于 "AddressOf"

c# - 增加 asp.net 应用程序的应用程序超时

c# - 如何在 xamarin 表单中绘制图像?

c# - ServiceStack OrmLite 多对一关系

c# - 错误返回 "No job functions found. Try making your job classes and methods public"后,尝试在 Linux 中构建 Azure 函数应用程序

c# - Postsharp 第 3 方类

c# - ToggleButton 内容绑定(bind)到它的状态

c# - 为什么这些行不能在字符串中运行

c# - 使用 C# 泛型压缩代码

c# - 使用 WebClient 或 HttpWebRequest 登录