Вырезать файлы в буфер обмена в С#

Я ищу способ программно вырезать файл в буфер обмена, например, некоторый вызов функции в С#, который делает то же самое, что и выбор файла в "Проводник Windows" и нажмите Ctrl + X.

После запуска программы и нажатия Ctrl + V в другой папке на жестком диске исходный файл будет перемещен в новую папку. Рассматривая вопрос о переполнении стека Скопируйте файлы в буфер обмена на С#, я знаю, что легко выполнить задание на копирование, но резка, похоже, отличается. Как я могу это сделать?

Ответ 1

Пожалуйста, попробуйте следующее, переведенное с Проект кода Настройка Буфер обмена файлов DropList с DropEffect в VB.NET:

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

DataObject data = new DataObject();
data.SetFileDropList(files);
data.SetData("Preferred DropEffect", dropEffect);

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

Ответ 2

Чтобы посмотреть, что произойдет, я заменил MemoryStream с DragDropEffects следующим образом:

data.SetData("FileDrop", files);
data.SetData("Preferred DropEffect", DragDropEffects.Move);

По-видимому, он работает как настоящий обрез, а не копия! (Это было на Windows 7 - я не пробовал другие операционные системы). К сожалению, это работает только по совпадению. Например,

data.SetData("Preferred DropEffect", DragDropEffects.Copy);

не дает копию (еще разрез). Кажется, что непустой вызывает cut, нулевую копию.