如何关闭已在目录中打开的文件

Sne*_*thy 4 c# directory file delete-file

我试图解析一个文件夹并删除其中的所有文件.

DirectoryInfo dir = new DirectoryInfo("C\\Temp");
if (dir.GetDirectories().Any(p => p.Name == "\\NewTemp"))
{
    foreach (string file in Directory.GetFiles(dir + "\\NewTemp"))
    {
        File.SetAttributes(file, FileAttributes.Normal);
        File.Delete(file);
    }
}
Run Code Online (Sandbox Code Playgroud)

此代码工作正常并删除我的\ NewTemp文件夹中的所有文件.但是如果打开任何文件,那么这些文件将不会被删除.我想要先关闭打开的文件并删除它们.我甚至试过了

foreach (string file in Directory.GetFiles(dir + "\\NewTemp"))
{
    TextReader tr = new StreamReader(dir+"\\NewTemp\\"+file);
    tr.Close();
    File.SetAttributes(file, FileAttributes.Normal);
    File.Delete(file);
}
Run Code Online (Sandbox Code Playgroud)

但没用.请告诉我我失踪的地方.

Jon*_*eet 5

请告诉我我失踪的地方.

那么你正在关闭文件句柄 - 但这不会影响任何其他文件句柄,无论它们是否由你的进程拥有.基本上你不能删除其他地方使用的文件,除非它已经用文件共享标志显式打开,允许删除它.据我所知,这就是Windows文件系统的工作方式.(编辑:我最初建议使用记事本作为保持文件句柄打开的一种方式,但显然它在将其加载到内存后关闭句柄.嗯,尝试其他应用程序:)

  • @Kratz:这是一项非常重要的任务.您需要以某种方式获取保存文件句柄的进程,并使这些进程关闭该句柄.没有单一的WinAPI功能. (2认同)