是否可以使用CFSTR_FILEDESCRIPTOR拖放创建文件夹?

时间:2019-05-02 13:43:22

标签: windows drag-and-drop explorer

我有一个可行的实现方式,基于Raymond Chens博客的“ What a drag”系列,使用CFSTR_FILEDESCRIPTORCFSTR_FILECONTENTS进行拖放:

https://devblogs.microsoft.com/oldnewthing/tag/what-a-drag

它可以很好地将一个或多个不存在的文件粘贴到任何资源管理器窗口中。

我接下来要实现的是粘贴整个文件树,例如两个文件和一个包含另一个文件的文件夹。

CFSTR_FILEDESCRIPTOR剪贴板格式有可能吗?如果没有,还有其他选择吗?

也许使用TYMED_ISTORAGE中等格式? (当前解决方案仅使用TYMED_HGLOBAL。)

我当然可以在某个地方创建一个临时文件夹,然后在其中创建目录树。我还必须清理这个临时文件夹,然后才觉得很黑。 (我认为这就是7-Zip的功能。)

1 个答案:

答案 0 :(得分:0)

Denis写道,可以通过将FILE_ATTRIBUTE_DIRECTORY传递给dwFileAttributes(在dwFlags中设置FD_ATTRIBUTES时)来创建一个空文件夹。

当您不需要空目录时,还有一种更简单的方法来获取文件夹。只需在cFileName成员中包含相对路径即可。

例如,如果Filedescriptor包含:

  • foo\bar
  • foo\baz

Explorer将创建一个foo文件夹,其中包含两个文件。

此解决方案有一个缺点:cFileName成员最多只能包含PATH_MAX - 1个字符,因此不适用于深度嵌套的结构或具有长文件名的结构。