在C#中将文件复制到剪贴板

我有一个Windows窗体 TreeView (节点,子节点)。 每个节点在其Tag中包含一些附加信息。 此外,每个节点映射磁盘上的文件。 在C#中复制/剪切/粘贴节点/文件最简单的方法是什么?

有一些示例代码会很高兴。

考虑使用Clipboard类 。 它具有将数据放在Windows剪贴板上以及从Windows剪贴板检索数据所需的所有方法。

StringCollection paths = new StringCollection(); paths.Add("f:\\temp\\test.txt"); paths.Add("f:\\temp\\test2.txt"); Clipboard.SetFileDropList(paths); 

上面的代码将把文件test.txt和test2.txt放在Windows剪贴板上进行复制。 执行代码后,您可以导航到任何文件夹并粘贴(Ctrl + V)文件。 这相当于在Windows资源管理器中选择两个文件并选择复制(Ctrl + C)。

如果仅在应用程序中复制和粘贴,则可以将树视图的剪切/复制操作映射到仅克隆所选节点的方法。 即:

 TreeNode selectedNode; TreeNode copiedNode; selectedNode = yourTreeview.SelectedNode; if (selectedNode != null) { copiedNode = selectedNode.Clone; } // Then you can do whatever you like with copiedNode elsewhere in your app. 

如果您希望能够粘贴到其他应用程序,那么您将不得不使用剪贴板。 通过了解有关IDataObject接口的更多信息,您可以获得比纯文本更有趣的东西 。 我记不起源了,但这里有我自己的笔记:

在类中实现时,IDataObject方法允许用户在类的实例中以多种格式存储数据。 以多种格式存储数据会增加您可能不知道其格式要求的目标应用程序可以检索存储数据的可能性。 要将数据存储在IDataObject的实例中,请调用SetData方法并在format参数中指定数据格式。 如果您不希望在检索存储数据时将autoConvert参数转换为其他格式,请将autoConvert参数设置为false。 在一个IDataObject实例上多次调用SetData,以多种格式存储数据。

一旦你填充了一个实现IDataObject的对象(例如你的名为yourTreeNodeDataObject的东西),你就可以调用:

 Clipboard.SetDataObjecT(yourTreeNodeDataObject);