C# 获取错误:";文件正在被另一个进程c使用;

C# 获取错误:";文件正在被另一个进程c使用;,c#,file,delete-file,C#,File,Delete File,我正试图删除硬盘上存在的文件,但出现异常,无法删除该文件,因为“文件正被其他进程使用” public void btnDelete(object sender, EventArgs e) { if(File.Exists("C:\\\test.txt")) { File.Delete("C:\\\test.txt"); } } 确保文件未由您自己或文件读取器对象打开 尝试此逻辑以确保您打开以检查其是否存在的同一线程没有保留对该文件的引用,从而使您无法保

我正试图删除硬盘上存在的文件,但出现异常,无法删除该文件,因为“文件正被其他进程使用”

public void btnDelete(object sender, EventArgs e)
{ 
    if(File.Exists("C:\\\test.txt"))
    {
        File.Delete("C:\\\test.txt");
    }
}

确保文件未由您自己或文件读取器对象打开

尝试此逻辑以确保您打开以检查其是否存在的同一线程没有保留对该文件的引用,从而使您无法保存该文件

public void btnDelete(object sender, EventArgs e)
{ 
    var exists = false;
    if(File.Exists("C:\\\test.txt")) 
    {
        exists = true;
    } 

    if(exists)
    {
        File.Delete("C:\\\test.txt");
    }
}

无法删除被其他进程锁定的文件。这是由操作系统阻止的。下面介绍了一种无论如何都可以执行此操作的方法:。从那里引述有关程序:

Note: 1. SE_DEBUG privilege must be enabled. 
      2. The function works with every kind of HANDLE
      3. It will bother the remote process :)
      4. The handles will be invalid after you closed 
         them remotely
所以它甚至可以使另一个进程崩溃。它的工作原理是

  • 打开另一个进程
  • 在包含/执行CloseHandle()的其他进程中创建线程
  • 等待线程完成
  • 关闭线程和进程句柄
  • 然后删除该文件

您必须使用
p/Invoke interop
将此C代码转换为C#,但功能不同。

错误消息的哪一部分您不理解?为什么我无法删除该文件?。。它哪儿也开不开。。!!您可能在自己的代码中留下了一个开放(未处理)流。请使用。使用“查找”菜单->查找句柄或DLL字符串。输入文件名并点击搜索。它将告诉您哪个进程打开了它。是的,由于文件原因。创建文件正在打开,由于文件未关闭,文件中的任何更新都被拒绝。谢谢大家。我不认为文件被打开了,因为我没有在任何地方使用文件阅读器对象,我只是检查文件是否存在。。如果是,请删除该文件。为什么要使用两个If块而不是仅仅粘贴该文件。删除“exists=true”行所在的(“C:\\\test.txt”)?似乎不需要对同一件事进行两次检查,但其间没有任何事情发生。有时,如果您终止对文件具有打开句柄的进程,系统会将该句柄保留到下次重新启动时,这就是为什么没有人能够使用写访问权限打开或删除该文件。