Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/EmptyTag/146.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在Windows中执行删除之前调用函数_C#_.net_Desktop Application - Fatal编程技术网

C# 在Windows中执行删除之前调用函数

C# 在Windows中执行删除之前调用函数,c#,.net,desktop-application,C#,.net,Desktop Application,在调用Delete函数之前,我需要调用一个函数来确定它是文件夹还是文件 我使用文件监视程序来了解在默认文件夹中所做的所有更改。 我需要使用路径获取已删除项目的类型(文件或文件夹)。 但是,由于文件夹/文件已被删除,因此路径出现错误(找不到路径!),因为文件/文件夹已被删除 是否有一种方法可以使用文件监视程序或任何其他方法在删除项目之前获取该项目的类型 这是我用于确定文件或文件夹的函数。此函数在文件监视程序中的删除事件(filewatcher.Deleted)中调用 private static

在调用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;
}

希望我的问题足够清楚!提前谢谢

TL;DR:这不可能以任何合理简单的方式完成,但您可以通过做一些“足够相似”的事情来解决它

您不能直接使用托管代码执行此操作,因为
FileSystemWatcher
只对已做的更改做出反应,此时文件已被删除,您无法查询有关它的信息

理论上,您可以在非托管代码中实现这一点,方法是编写一个DLL并将其注入所有可能删除您感兴趣的文件的进程中;DLL将钩住适当的Win32函数(一个好的选择是(未记录的)
NtSetFileInformation
,这是删除文件时调用的最低级别函数),并在删除之前检索您感兴趣的信息。当然,这将是相当困难和非常复杂的,所以在实践中,它可能根本不是一个选项


您可能希望尝试的一种解决方法是缓存有关目录内容的信息(例如,记住目录中存在的所有子目录),然后从缓存中检索“那是目录吗?”信息。如果这就是您所需要的,并且您可以时不时地容忍假阴性,那么它应该很容易实现。

非常感谢!是否可以阻止windows中的默认删除函数并从我的应用程序中调用删除函数?(这个问题是在查看您的答案后提出的。)@user32297:理论上可能是(不确定),但这仍然需要将代码注入到所有需要修改的进程中,并且必须为自己的应用程序提供通信通道,编写有效的服务器等等。你真的不想去那里。