Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将文件列表添加到剪贴板以进行剪切_C#_Wpf_Clipboard - Fatal编程技术网

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

C# 如何将文件列表添加到剪贴板以进行剪切,c#,wpf,clipboard,C#,Wpf,Clipboard,我在代码项目中找到了一个例子,它展示了如何将文件列表(路径)添加到剪贴板,并将其标记为移动而不是复制。 所使用的方法在互联网上的多篇文章中都有展示,据说是有效的,但我似乎无法让它发挥作用 我使用的是Windows 8.1(64位)。在我从列表中剪切了一些文件并尝试将这些文件粘贴到Explorer中的某个位置后,我只听到叮当声,什么也没发生。 不过,复制文件是可行的 以下是我所拥有的: StringCollection paths = new StringCollection(); foreach

我在代码项目中找到了一个例子,它展示了如何将文件列表(路径)添加到剪贴板,并将其标记为移动而不是复制。 所使用的方法在互联网上的多篇文章中都有展示,据说是有效的,但我似乎无法让它发挥作用

我使用的是Windows 8.1(64位)。在我从列表中剪切了一些文件并尝试将这些文件粘贴到Explorer中的某个位置后,我只听到叮当声,什么也没发生。 不过,复制文件是可行的

以下是我所拥有的:

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);

您将错误的数据传递给了
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);

我都试过了,但这次成功了!谢谢。