Welcome

首页 / 软件开发 / .NET编程技术 / 剪贴板剪切/复制与粘贴文件+1个待解决的问题

剪贴板剪切/复制与粘贴文件+1个待解决的问题2011-07-05 博客园 十二号的国王现在网上大多数对剪贴板的操作都只是对文本进行操作,很少有对文件进行操作的,在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: " + ex.Message,
"File operation failed",
MessageBoxButtons.OK, MessageBoxIcon.Stop);
}
}

RefreshView();
}

注意点:

一、把文件路径的列表SetData到剪贴板,注意一定要是数组形式。对一个文件进行操作也要以数组方式。

二、把标志信息也按照一定的格式SetData到剪贴板

问题:如果在windows mobile中,在移动设备里剪切/复制一个文件,发现在剪贴板中没有任何东西,而普通的windows文件则会有路径和标志位。现在的问题是如果从设备中剪切/复制文件,我怎么让PC能够进行粘贴,因为PC上是不认类似”\application...“的路径的。