C#中如何将文件复制到剪贴板?

30

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

最好提供一些示例代码。

2个回答

55
考虑使用 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)。


4
剪贴板仅仅是一个临时存储的地方。当数据被传送到剪切板时,没有关于这是复制还是剪切操作的信息。区分这两种操作是调用操作基于保存的状态来负责的责任。 - Jorge Ferreira
3
例如,当您在Word中剪切文本时,被剪切的文本会立即从文档中删除。被剪切的文本会放置在Windows剪贴板上,然后可以根据需要进行粘贴。 - Jorge Ferreira

5

如果您只在应用程序内部进行复制和粘贴操作,您可以将树形视图的剪切/复制操作映射到一个仅克隆所选节点的方法中。例如:

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 参数设置为 false。在 IDataObject 的一个实例上多次调用 SetData 来以多种格式存储数据。

一旦您填充了实现 IDataObject 的对象(例如名为 yourTreeNodeDataObject 的对象),那么您就可以调用:

Clipboard.SetDataObjecT(yourTreeNodeDataObject);

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