我正在尋找一種方法以編程下調一檔至剪貼板,例如,一些呼籲在C#中的函數,做同樣的作爲Windows Explorer選擇一個文件,然後按Ctrl鍵 + X。剪切文件在C#中剪貼板
運行程序,按下Ctrl鍵+V在硬盤上的其他文件夾後,原來的文件將是移動到新文件夾。通過查看堆棧溢出問題Copy files to clipboard in C#,我知道這是很容易做到的複印作業,但切割似乎工作不同。我怎樣才能做到這一點?
我正在尋找一種方法以編程下調一檔至剪貼板,例如,一些呼籲在C#中的函數,做同樣的作爲Windows Explorer選擇一個文件,然後按Ctrl鍵 + X。剪切文件在C#中剪貼板
運行程序,按下Ctrl鍵+V在硬盤上的其他文件夾後,原來的文件將是移動到新文件夾。通過查看堆棧溢出問題Copy files to clipboard in C#,我知道這是很容易做到的複印作業,但切割似乎工作不同。我怎樣才能做到這一點?
請嘗試以下方法,從The Code Project文章翻譯Setting the Clipboard File DropList with DropEffect in 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);
只是爲了看看會發生什麼,我有一個DragDropEffects這樣取代了MemoryStream:
data.SetData("FileDrop", files);
data.SetData("Preferred DropEffect", DragDropEffects.Move);
顯然,它可以作爲真正的剪輯而不是複製! (這是在Windows 7 - 我還沒有嘗試其他操作系統)。不幸的是,它只能巧合使用。例如,
data.SetData("Preferred DropEffect", DragDropEffects.Copy);
不會產生副本(仍是剪切)。看起來非空導致切割,空副本。
看我的答案,它使用DragDropEffects枚舉。 –
我想換這樣的代碼是有道理的的API中。我也喜歡在可以的情況下避免魔術字節串。
我想出了這個擴展方法,它解決了@Keith在他的回答中面臨的謎題,有效地使用了DragDropEffects
枚舉。
public static class Extensions
{
public static void PutFilesOnClipboard(this IEnumerable<FileSystemInfo> filesAndFolders, bool moveFilesOnPaste = false)
{
var dropEffect = moveFilesOnPaste ? DragDropEffects.Move : DragDropEffects.Copy;
var droplist = new StringCollection();
droplist.AddRange(filesAndFolders.Select(x=>x.FullName).ToArray());
var data = new DataObject();
data.SetFileDropList(droplist);
data.SetData("Preferred Dropeffect", new MemoryStream(BitConverter.GetBytes((int)dropEffect)));
Clipboard.SetDataObject(data);
}
}
是的,我確實意味着 「數據」。 –
完美的作品,謝謝! :) – friederbluemle
謝謝,我試圖用'Clipboard.SetFileDropList'並且它拋出一個異常,而是你的方法就像一個魅力! –