我有一个可行的实现方式,基于Raymond Chens博客的“ What a drag”系列,使用CFSTR_FILEDESCRIPTOR
和CFSTR_FILECONTENTS
进行拖放:
https://devblogs.microsoft.com/oldnewthing/tag/what-a-drag
它可以很好地将一个或多个不存在的文件粘贴到任何资源管理器窗口中。
我接下来要实现的是粘贴整个文件树,例如两个文件和一个包含另一个文件的文件夹。
CFSTR_FILEDESCRIPTOR
剪贴板格式有可能吗?如果没有,还有其他选择吗?
也许使用TYMED_ISTORAGE
中等格式? (当前解决方案仅使用TYMED_HGLOBAL
。)
我当然可以在某个地方创建一个临时文件夹,然后在其中创建目录树。我还必须清理这个临时文件夹,然后才觉得很黑。 (我认为这就是7-Zip的功能。)
答案 0 :(得分:0)
Denis写道,可以通过将FILE_ATTRIBUTE_DIRECTORY传递给dwFileAttributes(在dwFlags中设置FD_ATTRIBUTES时)来创建一个空文件夹。
当您不需要空目录时,还有一种更简单的方法来获取文件夹。只需在cFileName
成员中包含相对路径即可。
例如,如果Filedescriptor包含:
foo\bar
foo\baz
Explorer将创建一个foo
文件夹,其中包含两个文件。
此解决方案有一个缺点:cFileName
成员最多只能包含PATH_MAX - 1
个字符,因此不适用于深度嵌套的结构或具有长文件名的结构。