分享

(转)剪贴板剪切文件的完美解决(C#版)

 googo 2011-07-13
(转)剪贴板剪切文件的完美解决(C#版)
2010年06月28日 星期一 16:50

剪贴板剪切文件的完美解决(C#版)

  为 了找这个答案,我从下午一直到深夜3:10。终于找到了。万岁。用百度搜,无论我怎么搜法,都是炒现饭。人人都说的一个样。前面那篇VC的代码,实在翻不 成C#,结构体、常数、API声明的事搞得我头都大了。不得己只好搜外文资料。果然,一下子就在codeproject搜到了。点此处查看原始资料
实现的代码不多:
        /// <summary>
        /// 复制或剪切文件至剪贴板
        /// </summary>
        /// <param name="files">文件路径的数组</param>
        /// <param name="cut">是否剪切true为剪切,false为复制</param>
        void CopyToClipboard(string[] files,bool cut)
        {
            if (files == null) return;

            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);
        }
终于搞定了。这是一场意志的考验啊。当得到答案的时候,我差点热泪盈眶。5555555……
总结。剪切的问题难就难在要设那个标志位。而这个设法dotnet并不提供明显的支持。文件的剪切有两大关键:
一、把文件路径的列表SetData到剪贴板。
二、把标志信息也按照一定的格式SetData到剪贴板
上面代码我己测试通过:VS2008+.net 2.0+xp sp2

转自http://tianmoboping.blog.163.com/blog/static/1573953220087273219414/

注意:files字段必须是定义为string[] ,要不然会出现右键有粘贴但是粘贴不成功的问题

示例:http://hi.baidu.com/raoyao/blog/item/82b7013b0a279ee715cecba8.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多