現在網上大多數對剪貼板的操作都只是對文本進行操作,很少有對文件進行操作的,在codeProject上找到了解決方法,但還有一個問題困擾了我(等下再說,其實放在首頁就是看看大家能不能幫忙解決)。
先看看具體的代碼:
剪切/復制文件
void CopyToClipboard(bool cut)
{
string[] files = GetSelection();
if(files != null)
{
IDataObject data = new DataObject(DataFormats.FileDrop, files);
MemoryStream memo = new MemoryStream(4);
byte[] bytes = new byte[]{(byte)(cut ? 2 : 5), 0, 0, 0};
memo.Write(bytes, 0, bytes.Length);
data.SetData("Preferred DropEffect", memo);
Clipboard.SetDataObject(data);
}
}
對粘貼文件的處理:
粘貼文件的處理
private void pasteMenuItem_Click(object sender, System.EventArgs e)
{
IDataObject data = Clipboard.GetDataObject();
if (!data.GetDataPresent(DataFormats.FileDrop))
return;
string[] files = (string[])
data.GetData(DataFormats.FileDrop);
MemoryStream stream = (MemoryStream)
data.GetData("Preferred DropEffect", true);
int flag = stream.ReadByte();
if (flag != 2 && flag != 5)
return;
bool cut = (flag == 2);
foreach (string file in files)
{
string dest = homeFolder + "\\" +
Path.GetFileName(file);
try
{
if(cut)
File.Move(file, dest);
else
File.Copy(file, dest, false);
}
catch(IOException ex)
{
MessageBox.Show(this, "Failed to perform the" +
" specified operation:\n\n" + ex.Message,
"File operation failed",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}
RefreshView();
}
注意點:
一、把文件路徑的列表SetData到剪貼板,注意一定要是數組形式。對一個文件進行操作也要以數組方式。
二、把標志信息也按照一定的格式SetData到剪貼板
問題:如果在windows mobile中,在移動設備裡剪切/復制一個文件,發現在剪貼板中沒有任何東西,而普通的windows文件則會有路徑和標志位。現在的問題是如果從設備中剪切/復制文件,我怎麼讓PC能夠進行粘貼,因為PC上是不認類似”\\application...“的路徑的。