- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我正在尝试将 A 驱动器的内容复制到文件夹 C:\test\disk1 中。文件夹 disk1 已经存在。该程序编译但运行时出现错误 87。我知道错误 87 与无效参数有关,但我不确定问题出在哪里。有人有什么想法吗?
#include <Windows.h>
#include <stdio.h>
int main(int argc, char ** argv)
{
const wchar_t *const sourceFile = L"A:\\";
const wchar_t *const outputFile = L"C:\\test\\disk1";
SHFILEOPSTRUCTW fileOperation;
memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW));
fileOperation.wFunc = FO_COPY;
fileOperation.fFlags = FOF_SILENT | FOF_NOCONFIRMATION | FOF_NOCONFIRMMKDIR |
FOF_NOERRORUI | FOF_FILESONLY;
fileOperation.pFrom = sourceFile;
fileOperation.pTo = outputFile;
int result = SHFileOperationW(&fileOperation);
if (result != 0)
{
printf("SHFileOperation Failure: Error%u\n", result);
return 1;
}
memset(&fileOperation, 0, sizeof(SHFILEOPSTRUCTW));
printf("OK\n");
return 0;
}
最佳答案
注意 SHFILEOPSTRUCT 的文档尤其是 pFrom
和 pTo
:
PCZZTSTR pFrom;
PCZZTSTR pTo;
PCZZTSTR
是什么意思?
pFrom
Type: PCZZTSTR
Note This string must be double-null terminated.
因此您的解决方法是提供一个额外的尾随零。
const wchar_t *const sourceFile = L"A:\\\0";
const wchar_t *const outputFile = L"C:\\test\\disk1\0";
请注意,Windows API 函数接受 /
作为目录分隔符,因此可以将其编写为更易于阅读的形式:
const wchar_t *const sourceFile = L"A:/\0";
const wchar_t *const outputFile = L"C:/test/disk1\0";
(PCZZSTR
实际上是指向以空字符串结尾的零终止字符串列表的指针。)
关于c++ - SHFileOperation 错误 87,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42555049/
这个旧的 C++ 函数适用于 32 位操作系统,但不适用于 64 位操作系统。我想复制文件夹。你知道我必须改变什么吗? ************** Exception Text ******
我正在尝试使用 SHFileOperation 将文件从一个位置复制到另一个位置: SHFILEOPSTRUCT fileop; fileop.hwnd = 0; fileop.wFunc = FO_
我正在尝试将目录复制到新位置。所以我使用 SHFileOperation/SHFILEOPSTRUCT 如下: SHFILEOPSTRUCT sf; memset(&sf,0,sizeof(sf));
我正在为 WiX 编写一个 C++ 自定义操作,它将在安装期间调用以删除安装程序安装的任何残留物。考虑以下代码: UINT __stdcall DeleteResidue(MSIHANDLE hIns
我正在尝试通过 SHFileOperationA 复制文件夹功能。这是我的代码。 int main() { SHFILEOPSTRUCTA sf; int result; s
我正在使用 SHFileOperation() 从特定路径删除目录。它是在多个线程中完成的,删除的目录总是不同的。 有时,它会抛出异常: Exception thrown at 0x00007FF8A
我想要 一个后台线程将通过 SHFileOperation 函数复制文件,一次始终只有一个 SHFileOperation (但我希望它位于线程中)< 我需要 UI 输出,因此需要使用 FOF_SIM
我正在使用以下代码删除大量文件 function FastDelete(const fromDir: string): Boolean; var fos: TSHFileOpStruct; beg
我正在使用 Shell API 复制包含文件的文件夹。 SHFILEOPSTRUCT sf = {0}; sf.wFunc = FO_COPY; sf.hwnd = 0; sf.fFlags = FO
我正在尝试编写一个程序,该程序将使用 Windows API 根据日期删除一组与特定命名模式(通配符)匹配的文件/文件夹 ... SHFILEOPSTRUCT shFileOpStruct =
我有一段代码使用带有 FO_MOVE 操作的 Windows SHFileOperation 函数。指定的其他标志是 FOF_NOCONFIRMATION | FOF_NOERRORUI | FOF_
我使用这个程序: function MoveToRecycle(sFileName: widestring): Boolean; var fos: TSHFileOpStructW; begin
我有一个基于 MDI 的框架应用程序正在调用 SHFileOperation,如下所示: SHFILEOPSTRUCT opDelFiles = {0}; opDelFiles.hwnd = AfxG
我想删除一个文件到回收站。我使用这段代码。 SHFILEOPSTRUCT FileOp; FileOp.hwnd = NULL; FileOp.wFunc=FO_DELETE;
我正在使用以下函数将文件删除到回收站:(C++、MFC、Unicode) bool DeleteFileToPaperbasket (CString filename) { TCHAR Buff
我正在尝试将 A 驱动器的内容复制到文件夹 C:\test\disk1 中。文件夹 disk1 已经存在。该程序编译但运行时出现错误 87。我知道错误 87 与无效参数有关,但我不确定问题出在哪里。有
我找到了一些使用 SHFileOperation() 复制文件的代码,但我对 SHFILEOPSTRUCT structure 中可用的所有标志感到困惑. 这就是我正在做的事情。我有一个递归过程,根据
这会在桌面上创建一个新文件夹,但不会将文件夹 .pfrom 的内容 move 到文件夹 .pTo。 int main() { SHFILEOPSTRUCT sf = {0}; TCHA
我有一个涉及 SHFileOperation 的问题: SHFILEOPSTRUCT sf2; memset(&sf2,0,sizeof(sf2)); sf2.hwnd = N
我正在尝试使用 SHFileOperation 将文件/目录从一个位置复制到另一个位置。到目前为止,我的代码是, for(int index=0; index < clbSource.GetC
我是一名优秀的程序员,十分优秀!