从剪贴板中粘贴文件

6

感谢 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")

我知道可以递归获取所有文件,然后一个一个粘贴。但是为什么要重新发明轮子呢?如果操作系统可以为我完成这个任务,那就太好了...


听起来你正在尝试用普通递归方法解决简单的问题,却让它变得更加复杂。 - eandersson
1个回答

1
剪贴板有一个协议,一种相互约定的方法,用于从一个进程中获取数据到另一个进程。这样的协议需要有限的方式将合理的数据放在剪贴板上。你可以把任何东西放在剪贴板上,特别是.NET对象。但是,如果粘贴剪贴板数据的其他应用程序不理解.NET对象,很可能如果它不是用.NET编写的,那么它只会惊叹于WTF。
因此,您正在使用的方法只是一个小的Clipboard类帮助器方法,它使用标准协议将数据放在剪贴板上。另一个应用程序可能会理解,但不能保证。该协议是DataFormats.FileDrop。
您打算替换的方法也可以正常工作,您肯定可以将字符串放在剪贴板上。这是您想要复制/粘贴的最基本的东西。但是,粘贴它的应用程序只会将其识别为一个字符串。它不知道该字符串应该表示其他内容。该协议是DataFormats.Text。
解决方案非常简单,只需编写一个小的私有帮助器方法,该方法接受一个字符串。并使用Directory.GetFiles()创建一个StringCollection,然后将其放在剪贴板上。简单,任务完成,愉快。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接