我正在使用Shell API复制包含文件的文件夹。
SHFILEOPSTRUCT sf = {0};
sf.wFunc = FO_COPY;
sf.hwnd = 0;
sf.fFlags = FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR | FOF_NOERRORUI | FOF_SILENT | FOF_NO_UI;
sf.pFrom = "C:\\Users\\Sergi0\\AppData\\Local\\Temp\\untar.temp\\000\0";
sf.pTo = "F:\\\0";
// both pFrom and pTo are double NULL terminated, I have rechecked it
int err = SHFileOperation(&sf);
一切正常,文件夹被复制到驱动器F: 问题是消息
internal\sdk\inc\wil\filesystem.h(820)\windows.storage.dll!7684045C: (caller: 7676413A) ReturnHr(2) tid(660) 80070057 Incorrect parameter.
...
internal\sdk\inc\wil\filesystem.h(820)\windows.storage.dll!7684045C: (caller: 7676413A) ReturnHr(101) tid(660) 80070057 Incorrect parameter.
在Visual Studio调试控制台中打印。文件夹000中有100个文件,打印了100条消息。
我应该担心这些吗?我在Windows 10上使用VS 2017。
更新 我尝试过使用其他设备,我在VS2017和VS2008中都看到了相同的错误。但是,通用闪存驱动器没有这样的错误。所以它似乎与我使用的设备上的大容量存储实现有关。 我没有在SDK中的任何地方找到文件filesystem.h。
答案 0 :(得分:4)
您无需担心这些消息。复制引擎正在尝试获取有关目标目录(F:\
)的信息,但事实证明它不是目录;这是一个驱动器。返回错误(“愚蠢的复制引擎,这不是目录。”),复制引擎说“抱歉”,一切都正常进行。
很抱歉创建了不必要的警报。
答案 1 :(得分:2)
我应该担心这些吗?
如果文件被正确复制,并且SHFileOperation()
没有向您的代码报告错误,那么不,请不要担心。调试消息是API内部的,“错误参数”错误由API内部处理。
另一方面,SHFILEOPSTRUCT
确实有一个fAnyOperationsAborted
字段,如果任何单个文件无法复制,则该字段将设置为TRUE
。 SHFileOperation()
本身可能会成功,但单个文件可能已失败,因此您的代码应检查该条件。