【问题标题】:Paste files from the clipboard从剪贴板粘贴文件
【发布时间】:2013-12-20 02:26:37
【问题描述】:

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

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

【问题讨论】:

  • 这听起来更像是你在尝试做一些简单的事情,而普通的递归方法要复杂得多。

标签: c# clipboard copy-paste


【解决方案1】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-30
    • 2017-12-23
    • 2015-07-29
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多