【问题标题】:Unable to delete a folder with SHFileOperation无法使用 SHFileOperation 删除文件夹
【发布时间】:2023-03-14 23:50:02
【问题描述】:

我无法使用以下代码删除 Windows 中的文件夹:

SHFILEOPSTRUCT shfo = {
    NULL,
    FO_DELETE,
    path,
    NULL,
    FOF_SILENT | FOF_NOERRORUI | FOF_NOCONFIRMATION,
    FALSE,
    NULL,
    NULL };

SHFileOperation(&shfo);

我需要使用SHFileOperation 而不是RemoveDirectory,因为我需要删除非空文件夹。

然而,即使path 中的值指向一个空的本地文件夹并完全控制所有人用户,该函数也会失败,被双空终止(根据documentation 的要求),没有系统,隐藏或读取只有属性...

不幸的是,该函数没有返回错误代码(如果成功则返回零,否则返回非零)并且调用GetLastError 返回ERROR_SUCCESS...

哪里出错了?

【问题讨论】:

  • 它返回哪些错误值?这可能会给你一个想法(或者至少阻止任何试图回答这个问题的人不得不猜测 API 可能无法删除文件夹的所有可能方式)。
  • @Leo:不幸的是,如果成功,函数返回零,否则返回非零......
  • 它被记录为返回的不仅仅是布尔成功:msdn.microsoft.com/en-us/library/bb762164%28VS.85%29.aspx
  • @Leo: 哦,我正在使用的 MSDN 离线版本(Visual Studio 2005 附带的那个)中没有提到这一点。
  • 我过去也遇到过同样的事情。 :) 如果您遇到 API 问题,总是值得在线检查,不仅是为了更新的文档,而且对于社区内容 cmets,人们有时会在文档中添加常见问题或错误。

标签: winapi


【解决方案1】:

已解决...

path 变量实际上并没有以双空终止,因为我使用 wcscpy_s 在空字符之后填充字符串缓冲区(我之前用零填充)with the 0xFD value...

【讨论】:

  • 哈哈,有同样的问题,即使我认为我是双空终止..我不是
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-19
  • 2014-03-31
  • 1970-01-01
  • 2020-06-09
  • 2018-01-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多