2011-05-22 84 views
0

**附录:经过几个小时的研究后,我发现我吠叫错了树。问题不是剪贴板本身,但如果你喂它畸形的unicode文本会发生什么,我显然是这样做的。我的编辑器在处理它时没有问题,但当剪贴板得到它时,它在文本中出现错误的位置被截断。 稍后在应用程序中处理字符串时,读取'已损坏'的文件内容将具有相同的效果,因此我现在使用Encoder/DecoderExceptionFallback()函数来检测错误。 非常大开眼界。 **限制剪贴板中的文本数据大小?

我的winforms C#应用程序中的剪贴板有问题。我试图保存一个非常长的文本到剪贴板(> 140万字符),当使用DataFormats.UnicodeText时,我无法取回相同数量的文本。在特定情况下,我复制1469785个字符,但只返回502228个字符。如果我将数据标记为DataFormats.WaveAudio,然后在调用Clipboard.GetData()时强制字符串强制转换,我实际上得到正确的字符数。仅在使用文本时似乎有一些特殊处理。

这不起作用:

Clipboard.SetData(System.Windows.Forms.DataFormats.UnicodeText, _sb.ToString()); 
StringBuilder _sb2 = new StringBuilder(Clipboard.GetData(DataFormats.UnicodeText)); 

虽然这确实:

Clipboard.SetData(System.Windows.Forms.DataFormats.WaveAudio, _sb.ToString()); 
StringBuilder _sb2 = new StringBuilder((string)Clipboard.GetData(DataFormats.WaveAudio)); 

使用DataFormat.Text都于事无补,但添加的Unicode字符(原因很明显的是混淆: d)。

我可以在网上找到的所有信息都表明,剪贴板尺寸没有限制可用内存不足,因此如何解释?是否真的有一些特殊的文本数据格式处理?我确定我在这里错过了一些有趣的东西,但是什么?

回答

2

没有限制,至少在使用Windows API时。但是,除非您打算让其他应用程序能够粘贴此文件,否则首先使用剪贴板可能没有意义。

+0

是的,你是对的。显然剪贴板尺寸没有限制可用内存和/或虚拟内存。我找到了原因,并编写了一份附录。谢谢你的回答。 – themightyblob 2011-05-26 21:35:04