粘贴剪贴板中的文件

时间:2012-11-28 21:58:26

标签: c# clipboard copy-paste

感谢Stack Overflow问题 Copy files to clipboard in C# ,我能够使用Clipboard.SetFileDropList并最终得到:

using System;
using System.Collections.Specialized;
using System.Windows.Forms;

class Program
{
    [STAThread]
    static void Main ( string[] args)
    {    
        StringCollection paths = new StringCollection();
        paths.Add( @"C:\Users\Antonio\Desktop\MyDirectory" );
        Clipboard.SetFileDropList( paths);
    }
}

这样我就可以将整个目录放在剪贴板上并将其粘贴到我需要的位置。我希望能够用代码粘贴它。我不想去我要粘贴它的地方,然后按 Ctrl + V 。换句话说,我正在寻找类似的东西:

Clipboard.Paste("C:\Users\LocationWhereIWantToPasteTheFolder")

我知道我可以递归地获取所有文件,然后逐个粘贴它们。但为什么重新发明轮子?如果操作系统可以为我做这件事会很好......

1 个答案:

答案 0 :(得分:1)

剪贴板有一个协议,这是一种双方同意的方式,可以将数据从一个进程传输到另一个进程。这样的协议需要有限的方法将合理的数据放在剪贴板上。你可以把任何你想要的东西放在剪贴板上,特别是.NET对象。但是,如果粘贴剪贴板数据的其他应用程序不能理解.NET对象,很可能如果它不是用.NET编写的话那么它只会感叹WTF。

所以你使用的方法只是一个小的Clipboard类助手方法,它使用标准协议将数据放在剪贴板上。另一个应用程序可能可以理解,但不能保证。该协议是DataFormats.FileDrop。

您的预期替换也可以正常工作,您当然可以在剪贴板上放置一个字符串。你想要复制/粘贴的最基本的东西。但粘贴它的应用程序只会将其识别为字符串。它不知道该字符串应该意味着别的东西。该协议是DataFormats.Text。

解决方案非常简单,只需编写一个带字符串的私有辅助方法。并使用Directory.GetFiles()创建放在剪贴板上的StringCollection。简单,完成任务,亲吻。