Как вырезать/скопировать один или несколько файлов в буфер обмена

В разрабатываемом мной приложении потребовалось выполнять файловые операции с Проводником Windows через буфер обмена. Для того, чтобы Проводник смог узнать, хотите ли вы переместить или скопировать файл, необходимо в формате "Preferred DropEffect" объекта IDataObject указать желаемое действие. Для этого я написал маленький вспомогательный класс-extender для DataObject.

public static class DataObjectExtender
{
public static void SetPreferredDropEffect(this DataObject dataObject, DragDropEffects effect)
{
if (dataObject == null) throw new ArgumentNullException("dataObject");
byte[] data = BitConverter.GetBytes((uint) effect);
dataObject.SetData("Preferred DropEffect", new MemoryStream(data));
}

}

Теперь для того, чтобы скопировать файлы в буфер обмена, нужно выполнить

var dataObject = new DataObject();
dataObject.SetFileDropList(list); // list - экземляр StringCollection, содержащий список файлов и папок для копирования

dataObject.SetPreferredDropEffect(DragDropEffects.Copy|DragDropEffects.Link); //Разрешим создать копии или ярлыки на файлы

Clipboard.SetDataObject(dataObject, false);


А для выполнения операции <Вырезать> достаточно указать DragDropEffects.Move в SetPreferredDropEffect. Проводник сам позаботится о перемещении файлов в новое место.

Комментариев нет:

Отправить комментарий