2

我正在为 Windows 7 上的网络文件系统实现 Windows Explorer Shell 扩展,并且在实现删除功能时遇到了障碍。

假设我的远程文件系统层次结构如下:

Dir1
+-Dir2
| +-A
| +-B
+-C

我的理解是您需要实现ITransferSource::RemoveItem(我已经完成了),但我希望首先从文件系统树中最远的孩子递归调用(即深度优先递归遍历):

(A, B, Dir2, C, Dir1)

发生的情况是,我首先被称为根,然后是每个孩子,迭代地:

(Dir1, C, Dir2, A, B)

这对我来说有点奇怪,因为 Shell 已经递归地遍历所有要删除的项目以显示操作的进度条(“发现项目”对话框)。我的远程文件系统不支持删除非空目录;据我所知,Windows 上的本地文件系统也有同样的限制。我在 MSDN 上找不到任何关于更改迭代顺序的提示。

我假设实际的迭代顺序取决于文件系统中项目的创建顺序。

实现此接口方法时,COPYENGINE_S_DONT_PROCESS_CHILDREN如果您自己递归并删除整个树,则可以返回,但我认为这将不允许用户取消正在进行的删除(就像标准的 Explorer shell 一样)。我认为这是一个次优的解决方案,但如果我找不到更好的解决方案,它可能不得不这样做。

我的第一个想法是将非空目录删除请求排队以备后用,但我认为这不会起作用,因为扩展程序不知道目录的所有子项的删除操作何时完成。我还可以生成一个线程以“稍后”删除这些项目,但这几乎肯定会产生奇怪的无法解释的行为和崩溃。

所以,我想我的问题是,在 Windows 7 Shell 扩展中实现删除操作的正确方法是什么?

PS:您可能会说,Windows Shell Extensions 对我来说是一个全新的话题,所以如果问题不完整,我提前道歉;我会根据需要完善我的问题。

谢谢!

4

1 回答 1

1

从文档看来,EnterFolderLeaveFolder方法可以帮助您。

于 2011-10-03T17:42:48.790 回答