Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.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
Winapi IFileOperationProgressSink::PreCompyItem方法中跳过文件的HRESULT值_Winapi_Com - Fatal编程技术网

Winapi IFileOperationProgressSink::PreCompyItem方法中跳过文件的HRESULT值

Winapi IFileOperationProgressSink::PreCompyItem方法中跳过文件的HRESULT值,winapi,com,Winapi,Com,我正在试图找到一种方法来跳过IFileOperation::CopyItem方法中的一个或多个文件,其中整个文件夹被复制到一个新的目标 我尝试这样做的方式(计划A)是在FileOperationProgressSink::PreCopyItem方法中测试文件,如果存在匹配项,则返回一个值,例如COPYENGINE\u E\u USER\u CANCELLED(0x80270000)。否则,返回S\u OK。不幸的是,传递COPYENGINE\u E\u USER\u CANCELLED会取消整个

我正在试图找到一种方法来跳过
IFileOperation::CopyItem
方法中的一个或多个文件,其中整个文件夹被复制到一个新的目标

我尝试这样做的方式(计划A)是在
FileOperationProgressSink::PreCopyItem
方法中测试文件,如果存在匹配项,则返回一个值,例如
COPYENGINE\u E\u USER\u CANCELLED(0x80270000)
。否则,返回
S\u OK
。不幸的是,传递
COPYENGINE\u E\u USER\u CANCELLED
会取消整个操作,而不仅仅是当前文件的复制操作。计划B是在执行复制操作之前枚举要复制的文件并测试这些文件,但这似乎很麻烦

如果A计划似乎可行,如果您能分享
HRESULT
值,我将不胜感激,该值允许我跳过当前文件。系统复制功能包括在发生冲突时跳过一个或多个文件的选项,这一事实表明有办法做到这一点,但我不确定


谢谢。

PreCopyItem文档清楚地说明:“如果成功,则返回S_OK,否则返回错误值。如果出现错误值,则将取消复制操作和调用IFileOperation时挂起的所有后续操作。”这并没有留下跳过当前文件的空间。我认为您必须先使用计划B来迭代文件,并决定哪些文件应该复制或不复制。正如Remy所说,当
PreCopyItem
函数返回错误时,复制操作将被取消。但是,如果您可以使用该功能设置处理文件的方式,则当一个或多个文件的功能发生冲突时,它可以实现一个弹出对话框以跳过。虽然不是正式合同的一部分,但您可以尝试返回
S_FALSE
,看看是否达到预期效果
S_FALSE
是一个成功代码,通常用于表示操作没有运行到完成,但不是由于真正的错误(例如)造成的。@RemyLebeau-感谢您提醒我仔细阅读文档的返回值部分。正如您所说的,该语言除了成功的预复制或错误之外,没有留下任何空间,这会影响所有后续操作。B计划似乎是跳过文件的唯一方法@朱松-谢谢你的建议。我知道
IFileOperation::SetOperationFlags
方法,但它没有实现我想要实现的目标@I不可检测-谢谢你的建议。我试图返回
S_FALSE
,但没有成功。看起来官方合同很紧。