现在网上大多数对剪贴板的操作都只是对文本进行操作,很少有对文件进行操作的,在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到剪贴板
文章出处:http://www.codeproject.com/KB/shell/Explorer_Drag_Drop.aspx
相关文章:http://tianmoboping.blog.163.com/blog/static/1573953220087273219414/#comment=fks_082071082082085074080080083095085083086064093083085065
问题:如果在windows mobile中,在移动设备里剪切/复制一个文件,发现在剪贴板中没有任何东西,而普通的windows文件则会有路径和标志位。现在的问题是如果从设备中剪切/复制文件,我怎么让PC能够进行粘贴,因为PC上是不认类似”\\application...“的路径的。