我需要调用一个函数来确定在调用Delete函数之前它是一个文件夹还是文件。
我正在使用File Watcher了解默认文件夹中所做的所有更改。 我需要使用路径获取项目的类型(文件或文件夹)。 但由于文件夹/文件已被删除,因此文件/文件夹已被删除,因此路径错误(无法找到路径!)。
有没有办法在使用File Watcher或任何其他方法删除项目之前删除该项目的类型?
这是我确定文件或文件夹的函数。此函数在文件观察器中的Delete事件(filewatcher.Deleted)内调用。
private static bool IsDirectory(string path)
{
System.IO.FileAttributes fa = System.IO.File.GetAttributes(path);
bool isDirectory = false;
if ((fa & FileAttributes.Directory) != 0)
{
isDirectory = true;
}
return isDirectory;
}
希望我的问题足够明确!提前致谢!
答案 0 :(得分:1)
TL; DR:这是不可能以任何相当简单的方式进行的,但您可以通过做一些“足够相似”的事情来解决它。
您不能直接使用托管代码执行此操作,因为FileSystemWatcher
仅对已经进行的更改做出反应,此时文件已被删除,您无法查询有关它的信息。
理论上,你可以通过编写DLL并将其注入可能删除你感兴趣的文件的所有进程中,在非托管代码中实现它; DLL将挂钩相应的Win32函数 - 一个很好的选择是(未记录的)NtSetFileInformation
,这是在删除文件时调用的最低级函数 - 并在之前检索您感兴趣的信息。删除发生。当然,这将是非常困难和非常复杂的,所以在实践中它可能根本不是一个选择。
您可能想要尝试的解决方法是缓存有关目录内容的信息(例如,记住其中存在的所有子目录),然后检索“那是一个目录吗?”来自缓存的信息。如果这就是你所需要的,你可以偶尔容忍误报,那么它应该相当容易实现。