C++ 检查目录';windows下的共享模式

C++ 检查目录';windows下的共享模式,c++,windows,C++,Windows,我的问题似乎很简单,但谷歌却保持沉默。我被禁了可能是吗?:) 所以问题是,在删除目录或其子目录中的文件之前,我是否可以检查是否有任何文件被阻止删除?有简单的方法吗?没有 即使有,也不行。考虑这一系列事件: 您执行了检查,检查成功(没有被阻止的文件) 另一个进程接收CPU quantum并打开一个不带文件共享删除标志的文件 您的进程重新获得CPU并继续删除目录——但却发现它无法删除,因为现在有一个被阻止的文件 不,没有 即使有,也不行。考虑这一系列事件: 您执行了检查,检查成功(没有被阻止的文件)

我的问题似乎很简单,但谷歌却保持沉默。我被禁了可能是吗?:)

所以问题是,在删除目录或其子目录中的文件之前,我是否可以检查是否有任何文件被阻止删除?有简单的方法吗?

没有

即使有,也不行。考虑这一系列事件:

  • 您执行了检查,检查成功(没有被阻止的文件)
  • 另一个进程接收CPU quantum并打开一个不带文件共享删除标志的文件
  • 您的进程重新获得CPU并继续删除目录——但却发现它无法删除,因为现在有一个被阻止的文件
  • 不,没有

    即使有,也不行。考虑这一系列事件:

  • 您执行了检查,检查成功(没有被阻止的文件)
  • 另一个进程接收CPU quantum并打开一个不带文件共享删除标志的文件
  • 您的进程重新获得CPU并继续删除目录——但却发现它无法删除,因为现在有一个被阻止的文件

  • 好的,但这是我的方法(我真的需要它):我只是递归地尝试使用FILE_SHARE_READ或0获取目录中所有文件和子目录的句柄,将它们存储到数组中。如果我得到了所有句柄,我现在可以删除文件了。没有我想要的那么简单,但可能:)@fadim-这并不排除某些进程创建枚举将丢失的新文件。没有办法使它防弹。这意味着您仍然必须正确处理删除中途失败的情况。一旦你有了这些,为什么还要花额外的精力进行初步检查呢?好吧,但这是我的方法(我真的需要):我只是递归地尝试获取目录中所有文件和子目录的句柄,并将它们存储到数组中。如果我得到了所有句柄,我现在可以删除文件了。没有我想要的那么简单,但可能:)@fadim-这并不排除某些进程创建枚举将丢失的新文件。没有办法使它防弹。这意味着您仍然必须正确处理删除中途失败的情况。一旦你做到了这一点,为什么还要花额外的精力进行初步检查呢?