【问题标题】:Is it possible to create a folder using CFSTR_FILEDESCRIPTOR drag and drop?是否可以使用 CFSTR_FILEDESCRIPTOR 拖放创建文件夹?
【发布时间】:2019-05-02 13:43:21
【问题描述】:

我有一个基于 Raymond Chens 博客的“What a Drag”系列使用 CFSTR_FILEDESCRIPTORCFSTR_FILECONTENTS 进行拖放的工作实现:

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

它适用于将一个或多个不存在的文件粘贴到任何资源管理器窗口。

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

CFSTR_FILEDESCRIPTOR 剪贴板格式可以做到这一点吗?如果没有,还有其他选择吗?

也许与TYMED_ISTORAGE 中等格式有关? (目前的解决方案只使用TYMED_HGLOBAL。)

当然,我可以在某处创建一个临时文件夹并在那里创建我的目录树。我还必须清理这个临时文件夹,然后感觉很hacky。 (我认为这就是 7-Zip 所做的。)

【问题讨论】:

  • 是的,有可能。 FILEDESCRIPTOR 结构具有 dwFileAttributes 字段。只需将其设置为 FILE_ATTRIBUTE_DIRECTORY。

标签: windows drag-and-drop explorer


【解决方案1】:

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

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

例如,如果文件描述符包含:

  • foo\bar
  • foo\baz

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-25
    • 1970-01-01
    相关资源
    最近更新 更多