如何检查路径是操作系统删除后的文件或目录
本文关键字:删除 文件 操作系统 何检查 检查 路径 | 更新日期: 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);
}
}