如题,代码如下:
WCHAR szPath[MAX_PATH] { L'\0' };
swprintf_s(szPath, MAX_PATH, L"%ls\\abc.txt\0", L"D:");
BOOL ret = PathFileExistsW(szPath);
wprintf(L"%ls exists: %d\n", szPath, ret);
SHFILEOPSTRUCT fileOp;
fileOp.wFunc = FO_DELETE;
fileOp.pFrom = szPath;
fileOp.fFlags = FOF_NOCONFIRMATION | FOF_SILENT | FOF_NOERRORUI;
DWORD dwError = SHFileOperationW(&fileOp);
wprintf(L"%ls delete ret: 0x%08X\n", szPath, dwError);上述代码输出结果为:
只有手写路径才能删除成功,如fileOp.pFrom = L"D:\abc.txt\0"
通过swprintf_s拼接的路径字符串则失败
SHFILEOPSTRUCTW (shellapi.h) - Win32 apps | Microsoft Learn
微软官方文档要求

SHFILEOPSTRUCT的pFrom字段要以双null结尾:而

swprintf_s拼接的字符串只有一个null,如下图:因此只需要在字符串结尾再补一个null即可,修改的代码如下:
最终结果:
