从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找到它的使用方法:发现于https://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#中有一个很容易理解的完整示例。
上述就是C#学习教程:从C#进入Windows File Copy API分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1029129.html