如何将文件列表添加到剪贴板以进行剪切

时间:2015-04-27 21:43:20

标签: c# wpf clipboard

我在代码项目中找到了this article,它显示了如何将文件列表(路径)添加到剪贴板并将其标记为移动而不是复制。 使用的方法在互联网上的多篇文章中显示,并且据说可以正常使用,但我似乎无法使其工作。

我在Windows 8.1(64位)上。在我从列表中剪切了一些文件并尝试将文件粘贴到资源管理器中的某个地方之后,我只是听到了声音并没有任何反应。 复制文件虽然有效。

以下是我所拥有的:

StringCollection paths = new StringCollection();
foreach (FileInformation file in lbxFoundFiles.SelectedItems)
{
    paths.Add(file.FileInf.FullName);
}

IDataObject data = new DataObject(DataFormats.FileDrop, paths);
MemoryStream memo = new MemoryStream(4);
byte[] bytes = new byte[] { 2, 0, 0, 0 };
memo.Write(bytes, 0, bytes.Length);
data.SetData("Preferred DropEffect", memo);
Clipboard.SetDataObject(data);

enter image description here

1 个答案:

答案 0 :(得分:3)

您已向DataObject构造函数传递错误数据。以这种方式做到:

byte[] moveEffect = { 2, 0, 0, 0 };
MemoryStream dropEffect = new MemoryStream();
dropEffect.Write(moveEffect, 0, moveEffect.Length);

StringCollection filestToCut = new StringCollection {"D:\\test.txt"};
DataObject data = new DataObject("Preferred DropEffect", dropEffect);
data.SetFileDropList(filestToCut);

//or execute default constructor and uncomment line below:
//data.SetData("Preferred DropEffect", dropEffect);

Clipboard.Clear();
Clipboard.SetDataObject(data, true);