是否可以使用 CFSTR_FILEDESCRIPTOR 拖放来创建文件夹?
Is it possible to create a folder using CFSTR_FILEDESCRIPTOR drag and drop?
我有一个可以使用 CFSTR_FILEDESCRIPTOR
和 CFSTR_FILECONTENTS
拖放的有效实现,基于 Raymond Chens 博客中的“What a drag”系列:
https://devblogs.microsoft.com/oldnewthing/tag/what-a-drag
将一个或多个不存在的文件粘贴到任何资源管理器中效果很好window。
接下来我想要实现的是粘贴整个文件树,例如两个文件和一个包含另一个文件的文件夹。
CFSTR_FILEDESCRIPTOR
剪贴板格式是否可行?如果没有,还有其他选择吗?
也许是 TYMED_ISTORAGE
中等格式的东西? (目前的解决方案只是使用TYMED_HGLOBAL
。)
当然我可以在某处创建一个临时文件夹并在那里创建我的目录树。我还必须清理这个临时文件夹,这感觉很糟糕。 (我认为这就是 7-Zip 所做的。)
正如 Denis 所写,可以通过将 FILE_ATTRIBUTE_DIRECTORY 传递给 dwFileAttributes(当在 dwFlags 中设置 FD_ATTRIBUTES 时)来创建一个空文件夹。
当您不需要空目录时,可以使用更简单的方法来获取文件夹。只需在 cFileName
成员中包含一个相对路径。
例如,如果文件描述符包含:
foo\bar
foo\baz
Explorer 将创建一个 foo
文件夹,其中包含两个文件。
此解决方案有一个缺点:cFileName
成员最多只能有 PATH_MAX - 1
个字符长,因此这不适用于深层嵌套结构或具有长文件名的结构。
我有一个可以使用 CFSTR_FILEDESCRIPTOR
和 CFSTR_FILECONTENTS
拖放的有效实现,基于 Raymond Chens 博客中的“What a drag”系列:
https://devblogs.microsoft.com/oldnewthing/tag/what-a-drag
将一个或多个不存在的文件粘贴到任何资源管理器中效果很好window。
接下来我想要实现的是粘贴整个文件树,例如两个文件和一个包含另一个文件的文件夹。
CFSTR_FILEDESCRIPTOR
剪贴板格式是否可行?如果没有,还有其他选择吗?
也许是 TYMED_ISTORAGE
中等格式的东西? (目前的解决方案只是使用TYMED_HGLOBAL
。)
当然我可以在某处创建一个临时文件夹并在那里创建我的目录树。我还必须清理这个临时文件夹,这感觉很糟糕。 (我认为这就是 7-Zip 所做的。)
正如 Denis 所写,可以通过将 FILE_ATTRIBUTE_DIRECTORY 传递给 dwFileAttributes(当在 dwFlags 中设置 FD_ATTRIBUTES 时)来创建一个空文件夹。
当您不需要空目录时,可以使用更简单的方法来获取文件夹。只需在 cFileName
成员中包含一个相对路径。
例如,如果文件描述符包含:
foo\bar
foo\baz
Explorer 将创建一个 foo
文件夹,其中包含两个文件。
此解决方案有一个缺点:cFileName
成员最多只能有 PATH_MAX - 1
个字符长,因此这不适用于深层嵌套结构或具有长文件名的结构。