从C#进入Windows File Copy API

有没有办法从C#挂钩到Windows File Copy API? 我知道这需要非托管代码,但代码示例或启动程序会有所帮助。 我已经看过C ++代码,但它都是希腊语。

更新:我道歉,我应该更清楚我的意图。 我希望实际上将Windows的复制function更改为更严格(例如允许排队,调度,处理重启,暂停等)。 当我说钩子时,我的意思是API挂钩,这样当有人开始复制时,我会获得源和目的地,并且可以根据我的心愿处理它。 我已经读完了以前用来挂钩Mac OS API以做这些事情所以我假设在C ++ WINAPI世界中有一些类型的等价物。

我希望实际上将Windows的复制function更改为更加严格

您不应该在托管代码中执行此操作,因为您不应该编写托管shell扩展 。

更新:正如其他人所说,为什么不使用System.IO.File.Copy(...) ? 它调用相同的底层API。 正如Michael G指出的那样,也许您打算调用FileCopyEx API来允许您挂钩进度指示回调(???)这实际上是在.NET中P / Invoke文件复制内容的唯一原因。 有关如何实现FileCopyEx详细信息,请访问: http : //pinvoke.net/default.aspx/kernel32/CopyFileEx.html

原始答案:( 你真的不应该使用…)

删除了代码片段,因为你真的不应该使用它…如果你真的想制作破坏代码,你可以在以下url找到它的使用方法:发现于http://pinvoke.net/default.aspx /kernel32/CopyFile.html

使用非托管复制文件 API的另一个好处是能够进行进度回调。

您可以在此处查看如何执行此操作的示例。

注意:如其他答案中所述,我会使用File.Copy的托管版本,因为它更安全,通常可以执行您需要的所有操作。

您可以通过调用System.IO.File.Copy来完成此操作。 它的内部实现已经使用了Windows API。

编辑: File.Copy还正确处理权限,如果出现故障,可以使用有意义的数据抛出exception,因此您不必手动检查和分析返回状态。

您可以使用Deviare API Hook来拦截.NET中的任何API并使用VARIANT类型读取参数。 在C#中有一个很容易理解的完整示例。