如何检查路径是操作系统删除后的文件或目录

本文关键字:删除 文件 操作系统 何检查 检查 路径 | 更新日期: 2023-09-27 18:35:19

我正在使用System.IO.FileSystemWatcher来监视目录,并在修改或删除文件或目录时执行操作。

我遇到的问题是,一旦删除文件夹,就会引发Deleted事件,但我得到的参数不足以让我知道目录或文件是否被删除。

我得到的参数是一个路径,例如C:'Temp'a它可以是一个目录或没有扩展名的文件。

我尝试了以下方法,但它们都未能给我正确的结果。

var c = Path.DirectorySeparatorChar.ToString();
var isDir = Path.GetDirectoryName(path) == path.TrimEnd(c.ToCharArray());

var isDir =(File.GetAttributes(path) & FileAttributes.Directory) == FileAttributes.Directory;

如何检查路径是操作系统删除后的文件或目录

我想你不能可靠地做到这一点。

文件

和目录的路径可能不明确:目录可以有"扩展名",而文件可以根本没有扩展名。

如果文件或目录存在,操作系统知道它是什么。当它消失时,没有人再知道了。

您必须记住它是删除前的文件还是目录,而不是在删除后尝试确定它。

您可以在开始观看之前将文件和目录存储到单独的集合中。然后,每当删除某些内容时,只需检查哪个集合包含已删除的path

例如:

var files = Directory.GetFiles("path", "*", SearchOption.AllDirectories);
var directories = Directory.GetDirectories("path","*", SearchOption.AllDirectories);
private static void OnDeleted(object source, FileSystemEventArgs e)
{
    if(files.Contains(e.FullPath))
    {
        // it's a file
    }
    else 
    {
       // it's a directory
    }
}
如果您有具有

扩展名的文件和没有扩展名的目录。我建议使用以下简单的解决方案

private static void OnDeleted(object source, FileSystemEventArgs e)
{
  bool iSDirectory = Path.GetExtension(e.FullPath).Equals("");
  if(iSDirectory)
   {
        Console.WriteLine("Directory:{0}",e.FullPath);
   }
   else
   {
         Console.WriteLine("File:{0}",e.FullPath);
   }
}