调用 SHFileOperation 删除文件夹时返回 1026 (0x402)错误的原因

在一款产品的清空历史功能中,发现SHFileOperation API在删除文件夹时偶尔返回错误码1026(0x402)。问题定位在SHFileOperation调用上,其可能导致目标文件夹无法删除。该API的使用涉及LPSHFILEOPSTRUCT结构体。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如题,昨天遇到一个产品中的清空功能不可用的问题。现象也比较奇怪:当点击界面上的清空历史列表功能的时候,要删除的目标文件夹有时能被删除,有时却不能被删除。经过调试,确认问题出在 SHFileOperation 的调用上,它有时会返回错误码:10260x402 )。先看下这个API的原型:

int SHFileOperation(

LPSHFILEOPSTRUCT lpFileOp

);

其中结构体 LPSHFILEOPSTRUCT 的定义为:

 


 经过一番谷歌,终于查到原因:调这个 API 时传入的结构体的成员 pFrom 必须以两个 '/0' 字符结尾,而不论有没有指定 fFlags 为 
FOF_MULTIDESTFILES!

嗐,原来是这个原因!

原来是 MSDN 没看清楚,写代码时没有多加一个 '/0'。下面是 MSDN 的部分说明:

  
  
   
   pFrom

   
   
Address of a buffer to specify one or more source file names. These names
must be fully qualified paths. Standard Microsoft MS-DOS wild cards, such as
"*", are permitted in the file-name position. Although this member is declared
as a null-terminated string, it is used as a buffer to hold multiple file names.
Each file name must be terminated by a single NULL character. An additional NULL
character must be appended to the end of the final name to indicate the end of
pFrom .

下面是一个更正后的 Demo:

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值